java基础复习(二十四)

网络编程概述

计算机网络

  • 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

网络编程

  • 就是用来实现网络互联的不同计算机上运行的程序可以进行数据交换

网络编程三要素

ip

每个设备在网络中的唯一标识

ipconfig:查看本机IP

ping:测试连接

本地回路地址:127.0.0.1 255.255.255.255是广播地址

IPV4:4个字节组成,4个0-255.大概42亿,30亿都在北美,亚洲4亿,2011年初已经分配完。

IPV6:8组,每组4个16进制数。

IPV4转型IPV6比较慢

端口

每个程序在设备上的唯一标识

每个程序都需要绑定一个端口号

协议

为计算机网络中进行数据交换而建立的规则、标准或约定的集合

UDP 面向无连接,数据不安全,速度快。不区分客户端和服务端。

TCP 面向连接(三次握手) 数据安全,速度略低。分为客户端和服务端

​ 三次握手:客户端先向服务端发起请求。服务端响应请求,传输数据。你愁啥,我瞅你咋地,暂牢牢去。

Socket通信原理

套接字概述

  • 网络上具有唯一的标识的IP地址和端口号组合在一起才能构成唯一能识别的标识号

UDP传输

1.发送send

  • 创建DatagramSocket,随机端口号
  • 创建DatagramPacket,指定数据,长度,地址,端口
  • 使用DatagramSocket发送DatagramPacket
  • 关闭DatagramSocket
  • @throw SocketException
public class Demo1_Send {
    public static void main(String[] args) throws IOException {
        String str = "what are you doing";
        DatagramSocket socket = new DatagramSocket();
        DatagramPacket packet = new DatagramPacket(str.getBytes(),str.getBytes().length, InetAddress.getByName("127.0.0.1"),6666);
        socket.send(packet);
        socket.close();
    }
}

2.接收 Receive

  • 创建DatagramSocket,指定端口号
  • 创建DatagramPacket,指定数组,长度
  • 使用DatagramSocket接收DatagramPacket
  • 关闭DatagramSocket
  • 从DatagramPacket中获取数据
  • @throw Exception
public class Demo1_Receive {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(6666);//创建Socket
        DatagramPacket packet = new DatagramPacket(new byte[1024],1024,1024);//创建packet
        socket.receive(packet);
        byte[] arr = packet.getData();
        int len = packet.getLength();
        System.out.println(new String(arr,0,len));
        socket.close();
    }
}

UDP传输多线程--一个界面就可以解决了

class Receive extends Thread {
    DatagramSocket socket = new DatagramSocket(6666);//创建Socket
    DatagramPacket packet = new DatagramPacket(new byte[1024],1024,1024);//创建packet
    socket.receive(packet);
    byte[] arr = packet.getData();
    int len = packet.getLength();
    System.out.println(new String(arr,0,len));
    socket.close();
}

class Send extens Thread {
    
}

UDP文件生成一个jar文件

右键生成 保存

TCP协议

客户端

  • 创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器
  • 调用Socket的getInputStream()和getOutputStream方法获取和服务端相连的IO流
  • 输入流可以读取服务端输出流写出的数据
  • 输出流可以写出数据到服务端的输入流

    Socket socket = new Socket("127.0.0.1",12345);
    InputStream is = socket.getInputStream();
    OutputStream os = socket.getOutputStream();
    
    byte[] arr = new byte[1024];
    int len = is.read(arr);
    System.out.println(new String(arr,0,len()));
    os.write("挖掘机学习".getBytes());
    
    socket.close();

服务端

  • 创建ServerSocket(需要指定端口号)
  • 调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
  • 调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
  • 输入流可以读取客户端输出流写出的数据
  • 输出流可以写出数据到客户端的输入流
  • @throws IOException
ServerSocket server = new ServerSocket(12345);
Socket socket = server.accept();//接收客户端的请求

InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();

os.write("百度一下,你就知道".getBytes());
byte[] arr = new byte[1024];
int len = is.read(arr);
System.out.println(new String(arr,0,len()));

服务端是要做成多线程的

网络编程(练习)

1.客户端不断向服务端发送数据,服务端将字符串反转后写回,客户端在此读取到是反转后的字符串。

2.客户端向服务器上传文件

  • 提示输入要上传的文件路径,验证路径是否存在以及是否是文件夹
  • 发送文件名到服务端
  • 建立多线程服务器
  • 读取文件名
  • 判断文件名是否存在,将结果发回客户端
  • 接收结果,如果存在给予提示,程序直接退出
  • 如果不存在,定义FileInputStream读取文件,写出网络
  • 定义FileOutputStream,从网络读取文件,写出到网络

本文链接:

https://heyzen.club/index.php/J/277.html
1 + 4 =
快来做第一个评论的人吧~