欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TCP、UDP、网络通信

程序员文章站 2022-06-30 09:10:00
...

网络通信协议:在同一个网络中进行连接和通信的计算机需要遵守的一些规则,就比如行驶在道路上的汽车要遵守交通规则一样,计算机的规则就叫网络通信协议,它对数据的传输速率、格式做了同一的规定,通信双方必须遵守规定才能完成数据交换。

UDP:用户数据报协议(User Datagram Protoclol)。无连接通信协议,即在数据传输时,发送端和接收端不会建立逻辑逻辑。简单说,就是发送端只管发送数据,不管接收端会不会收到。优点是资源消耗少,通信效率高。缺点传输数据不能太大,而且不能保证数据完整性。所以常用于音频、视频和普通数据如视频会议等。

TCP:传输控制协议(Transmission Control Protocol)。是面向连接的通信,即传输数据前需要建立逻辑连接,它提供了计算机之前可靠无差错的数据传输。连接中需要明确客户端与服务端,有客户端向服务端发起连接请求,每次连接都需要经过“三次握手”。

  • 第一次握手:客户端向服务端发出连接请求,等待服务端确认。
  • 第二次握手:服务端确认请求,然后向客户端回送一个响应。
  • 第三次握手:客户端再次向服务端发送确认信息,建立连接。

    TCP、UDP、网络通信

     

完成三次握手后,就建立连接,可以保证数据传输安全,所以应用于下载文件,浏览网页等。

网络编程三要素:

  • 协议:计算机网络必须遵守的规则。
  • IP地址:指互联网协议地址(Internet Protocol Address)。IP地址用于给网络中的计算机设备做唯一的编号,相当于我们的“电话号码”。IP地址又分为IPv4和IPv6。
  • 端口号:端口号用来标识计算机设备中的进程(应用程序)。两个字节表示的整数,取值范围0~65535。0~1023用于一些知名的网络和应用,普通程序使用1024以上。

TCP通信程序:TCP通信需要2严格区分客户端和服务端,服务端先启动等待客户端连接,客户端主动连接服务端,连接成功就可以通信了,服务端不能主动连接客户端。

简单的TCPTCP通信程序:

1、服务端启动,创建ServerSocket对象,等待连接。

2、客户端启动,创建Socket对象,请求连接。

3、服务端调用accept方法,返回一个Socket对象。

4、客户端Socket对象获取OutputStream,向服务端写出数据。

5、服务端Socket对象获取InputStream,获取客户端发送的数据。

服务端:

public class Server {
    public static void main(String[] args) throws Exception{
        System.out.println("服务端启动......");
        //指定端口 创建ServerSocket
        ServerSocket server = new ServerSocket(8888);
        //阻塞等待连接
        Socket accept = server.accept();
        //获取输入流 接收数据
        DataInputStream dis = new DataInputStream(accept.getInputStream());
        System.out.println(accept.getLocalAddress() + "对你说:" + dis.readUTF());
        
        //关闭资源
        dis.close();
        accept.close();

    }
}

客户端:

public class Client {
    public static void main(String[] args) throws Exception {
        System.out.println("客户端启动......");
        //指定服务端地址与端口 创建Socket
        Socket client = new Socket("127.0.0.1",8888);
        //获取输出流 发送数据
        DataOutputStream dos = new DataOutputStream(client.getOutputStream());
        dos.writeUTF("你好,我是客户端!");
        dos.flush();

        //关闭资源
        dos.close();
        client.close();

    }
}