若两台计算机上的应用程序通过网络进行通信,需要有IP地址(唯一表示网络中的机器)、同一种协议、端口(区分一台计算机上的不同应用程序)。

    IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础。

 

相关类

(1)InetAddress:用于标识网络上的硬件资源,表示互联网协议(IP)地址。该类没有构造方法,可通过该类提供的静态方法来获取实例。

(2)java.net.URL:表示统一资源定位符(Uniform Resource Locator)。URL由协议名称和资源名称组成。

(3)基于TCP协议实现网络通信的类:TCP协议是面向链接、可靠的、有序的,以字节流的方式发送数据。

--》Socket(客户端):需要指定所要连接的服务器的地址(ip或域名)和端口号。可通过该实例获取输入输出流,对于同一个Socket,一旦输入输出流关闭则Socket也会关闭,但是方法shutdownInput和shutdownOutput则不会。所以一般不用关闭流,而是直接关闭socket即可。

--》ServerSocket(服务器端):需要指定服务器的端口号。通过accept()方法来监听端口号,该方法是阻塞方法,只有当客户端有访问本端口才会停止阻塞并返回一个Socket(与客户端建立了连接)。

猜想:输出流在关闭时会写入结束符号,所以与其对应的输入流就会读到结束符号(-1)从而停止阻塞。

(4)基于UDP协议实现网络通信的类:UDP协议(用户数据报协议)是无连接、不可靠的、无序的。以数据报作为数据传输的载体。进行数据传输时,首先需要将要传输的数据定义成数据报(Datagram),在数据报中指定数据所哟奥达到的Socket(主机地址和端口号),然后再将数据报发送出去。

--》DatagramPacket:表示数据报包。若数据报用于接受客户端发送的数据,则指定数据存放的位置和大小等(调用数据报的getLength方法可以知道数据报接收到的字节长度);若数据报用于发送到服务器,需要指定服务器的地址、端口号和要发送的数据。

--》DatagramSocket:进行端到端通信的类,用来发送和接收数据包的套接字。需要指定端口号,以接受发到该端口号的数据报。该类有个阻塞方法用于接受数据报--receive(DatagramPacket packet),