Java网络编程
IO的拓展,即在网络中进行IO。
TCP/IP模型
- 应用层:常见协议HTTP, FTP, DNS;
- 传输层:常见协议TCP, UDP; 传输单位segment;
- 网络层:常见协议IP; 传输单位packet;
- 数据链路层:传输单位frame;
- 物理层: 传输单位bits。
套接字:IP与端口号组成了套接字Socket,如HTTP(80)。网络通信实际上是Socket间的通信,数据在socket间以IO流的形式传递。
通信协议:TCP(要求三次握手,可靠,需要释放连接);UDP(无需连接,不可靠,效率高)。
TCP案例
客户端流程:
- 创建Socket对象,指明服务器端IP和port;
- socket创建输出流;
- 输出流发送信息;
- 关闭流和socket。
- 创建ServerSocket,指明监听的端口;
- 通过serversocket.accept( ),ServerSocket创建用于接收数据的socket;
- socket创建输入流;
- 输入流接收数据;
- 关闭流和socket。
如果需要由服务器端返回信息,并由客户端接收。此时客户端需要获取socket的输入流并读取数据。服务器端则要获得socket的输出流并向其中写入数据。但在服务器端输出前,客户端要首先关闭输出流。这是因为服务器端的输入流是阻塞式的,所以服务器端会一直等待来自客户端的数据。在等待过程中,服务器端无法执行后续任何其他任务。因此,需要客户端通知服务器端传输任务已经完成。
服务器端也可以将接受的信息保存,此时需要一个文件输出流。例:由客户端向服务端传输一个文件。服务端保存文件并返回确认给客户端。
UDP:DatagramSocket,DatagramPacket
发送端:通过DatagramSocket发送DatagramPacket,即ds.send(p)。在每个DatagramPacket中指明接收端的IP和端口。接收端:通过DatagramSocket监听端口,并通过ds.receive(p)接收DatagramPacket。