内容来自于《Java语言程序设计》
计算机可以用个互联网服务提供商(ISP),使用拨号、DSL、电缆调制器或通过局域网(LAN)来连接到互联网。
当一台计算机需要与另一台计算机通信时,需要知道另一台计算机的地址。互联网协议(IP)可以用来唯一地标识互联网上的计算机。IP地址由四段用点隔开的0-255的十进制数组成。由于不容易记住这么多的数字,所以,经常将它们映射为被称为域名的有含义的名字。在互联网上有特殊的称为域名服务器的服务器,它把主机的名字转换成IP地址。当一台计算机要链接某个主机时,他首先请求DNS将这个域名转换成IP地址,然后用这个IP地址来发送请求。
互联网协议是在互联网中的一台计算机向另一台计算机传输数据的一种低层协议,数据是以包的形式封装的。两个和IP一起使用的较高层的协议是传输控制协议(Transmission Control Protocol,TCP)和用户数据报协议(User Datagram Protocol,UDP)。TCP能够让两台主机建立连接并交换数据流。TCP确保数据的传送,也确保数据包以它们发送的顺序正确传送。UDP是一种用在IP之上的标准的、低开销的、无连接的、主机对主机的协议。UDP允许一台计算机上的应用程序向另一台计算机上的应用程序发送数据报。
Java支持基于流的通信和基于包的通信。基于流的通信使用传输控制协议(TCP)进行数据传输,而基于包的通信使用用户数据报协议(UDP)。因为TCP协议能够发现丢失的传输信息并重新发送,所以,传输过程是无损的和可靠的。相对而言,UDP协议不能保证传输没有丢失。因此,大多数java程序设计采用基于流的通信。
客户端/服务器计算。
网络和java紧密结合。Java API提供用于创建套接字的类来便于程序的网络通信。套接字是两台主机之间的逻辑连接的端点。可以用来发送和接收数据。Java对于套接字通信的处理非常类似于对输入输出操作的处理,因此,程序对套接字读写就像对文件读写一样容易。
网络程序设计通常设计一个服务器和一个或多个客户端。客户端向服务器发送请求,而服务器响应请求。客户端从尝试建立与服务器的连接开始,服务器可能接受或拒绝这个链接,一旦建立链接,客户端和服务器就可以通过套接字进行通信。
当客户端尝试连接到服务器时,服务器必须正在运行。服务器等待来自客户端的连接请求。
要创建一个服务器,需要创建一个服务器套接字,并把它附加到一个端口上,服务器从这个端口监听连接。端口标识套接字上的TCP服务,端口号的范围从0到65536,但是0到1024是为特权服务保留的端口号。比如,电子邮件服务器运行在端口25上。Web服务器通常运行在端口80上。可以选择任意一个当前没有被其他进程使用的端口。
服务器接受连接后,服务器和客户端之间的通信就像输入输出(I/O)流一样进行操作。
由于文本I/O需要编码和解码,所以,二进制I/O的效率比文本I/O的效率更高。因此,最好使用二进制I/O在服务器和客户端之间进行数据传输,以便提高效率。
InetAddress类,可以使用类InetAddress来获取客户端的主机名和IP地质。InetAddress类对IP地址建模。
多个客户端同时连接到单个服务器是非常常见的。典型的情形是,一个服务器程序连续不停地在服务器计算机上运行,Internet上各处的客户端都可以连接到它。可以使用线程处理服务器上的多个客户的同时访问。可以简单地为每个连接创建一个线程。
While(true){
Socket socket=serverSocket.accept();
Thread thread=new ThreadClass(socket);
Thread.start();
}
服务器套接字可以有多个连接。While循环的每次迭代创建一个新的连接。无论何时,只要建立一个新的连接,就创建一个新线程来处理服务器和新客户端之间的通信,这样,就可以有多个连接同时运行。
互相独立运行的线程与指定的客户端进行通信。每个线程创建数据输入输出流向客户端发送和接收数据。