一、Socket套接字是什么?
socket是一种抽象层,应用程序通过它来发送和接收数据。socket可以将应用程序添加到网络中,并与处于同一个网络中的其他应用程序进行通讯。tcp/ip协议族主要的socket类型为流套接字(stream socket)和数据报套接字(datagram socket),分别对应tcp和udp传输。
二、如何确定一个套接字
tcp/ip套接字由一个互联网地址,一个端对端协议(TCP或UDP协议),还有程序的端口号(如8080)确定。
三、TCP套接字---可靠,有序,面向字节流的
tcp通讯是通过字节流传输的。
java中为TCP协议编程提供了Socket类和ServerSocket类。一个Socket实例代表了TCP连接的一端。一个TCP连接是一条抽象的双向信道(说的是客户端/服务器双方都可以发信息吧),两端分别由IP地址和端口号确定。在两端通信之前,需要先建立连接,先由客户端向服务端发送连接请求。ServerSocket实例则监听TCP连接请求,为每一个请求创建新的Socket实例。这说明了服务端需要同时处理ServerScoket实例和Socket实例。客户端则只需要处理Socket实例。
大致步骤:1.创建socket 2.获取输入输出流进行通讯 3.关闭socket
四、UDP编程--尽力而为,不保证无差错,无序的。
UDP 协议提供了一种不同于 TCP 协议的端到端服务。实际上 UDP 协议只实现两个功
能: 1)在 IP 协议的基础上添加了另一层地址(端口), 2)对数据传输过程中可能产生的 数据错误进行了检测,并抛弃已经损坏的数据。udp协议具有以下特点:1.UDP程序是通过数据报文的形式通讯的。由于不需要创建连接,所以数据报文中会包含了自己的地址信息和目的地址信息,而且数据报文信息是独立的。
2.还有不同于tcp的是,udp是保留边界信息。那么保留边界信息是指什么呢?
保留消息边界,就是指传输协议把数据当作一条独立的消息在网上传输,接收端只能接收独立的消息。也就是说存在保护消息边界,那么接收端一次只能接收发送端发出的一个数据包。
那么编写udp程序需要哪些东西呢?
一个DatagramPacket: 数据报文,包含了所有的信息
一个DatagramSocket: udp套接字,用于传输数据报文。
总的步骤:1.创建DatagramPacket 2.创建DatagramSocket 3.调用socket的send方法发送报文