第十四章 网络

一,客户端/服务器计算

Java提供ServerSocket类来创建服务器套接字,Socket类来创建客户端套接字。Internet 上的两个程序通过使用IO流的服务器套接字和客户端套接字进行通信。
网络功能紧密地集成在Java中。Java API提供用于创建套接字的类来便于程序通过Internet通信。套接字( socket)是两台主机之间逻辑连接的端点,可以用来发送和接收数据。Java对套接字通信的处理非常类似于对输入输出操作的处理,因此,程序对套接字读写就像对文件读写一样容易。
网络程序设计通常涉及一个服务器和一个或多个客户端。客户端向服务器发送请求,而服务器响应请求。客户端从尝试建立与服务器的连接开始,服务器可能接受或拒绝这个连接。一旦建立连接,客户端和服务器就可以通过套接字进行通信。
当客户端尝试连接到服务器时,服务器必须正在运行。服务器等待来自客户端的连接请求。创建服务器和客户端所需的语句如图。
在这里插入图片描述

服务器套接字

要创建服务器,需要创建一个服务器套接字(server socket),并把它附加到一个端口上,服务器从这个端口监听连接。端口标识套接字上的TCP服务。端口号的范围为0-65535,但是0~1024是为特定服务保留的端口号。
创建一个服务器套接字:

ServerSocket serverSocket = new ServerSocket(port);
//如果端口已被占用,则会导致Java.net.BindException异常

客户端套接字

创建服务器套接字之后,服务器可以使用下面的语句监听连接:

Scoket scoket = serverSocket.accept();

这个语句会一直等待,直到一个客户端连接到服务器套接字。客户端执行下面的语句,请求与服务器进行连接:

Socket socket = new Socket("port",8000);

当使用主机名创建套接字时,Java虚拟机要求 DNS将主机名译成IP地址。

通过套接字进行数据传输

服务器接受连接后,服务器和客户端之间的通信就像输人输出(IO)流一样进行操作。创建流以及它们之间进行数据交换所需要的语句,
在这里插入图片描述

二,InetAdress类

InetAddress 类具有一个缓存,用于存储成功及不成功的主机名解析。
默认情况下,当为了防止 DNS 哄骗攻击安装了安全管理器时,正主机名解析的结果会永远缓存。当未安装安全管理器时,默认行为将缓存一段有限(与实现相关)时间的条目。不成功主机名解析的结果缓存非常短的时间(10 秒)以提高性能。

		ServerSocket serverSocket = new ServerSocket(8541);
		Socket socket = serverSocket.accept();
		InetAddress inetAddress = socket.getInetAddress();
		inetAddress.isMulticastAddress(); //检查 InetAddress 是否是 IP 多播地址的实用例行程序。
		inetAddress.isAnyLocalAddress(); //检查 InetAddress 是否是通配符地址的实用例行程序。
		inetAddress.isLoopbackAddress(); //检查 InetAddress 是否是回送地址的实用例行程序。
		inetAddress.isLinkLocalAddress(); //检查 InetAddress 是否是链接本地地址的实用例行程序。 

三,服务多个客户

多个客户端同时连接到单个服务器是非常常见的。典型的情形是,一个服务器程序连续不停地在服务器计算机上运行,Internet 上各处的客户端都可以连接到它。可以使用线程处理服务器上多个客户端的同时访问。例如:

		while(true) {
			ServerSocket serverSocket = new ServerSocket(8541);
			Socket socket = serverSocket.accept();
			Thread thread = new Thread(socket);
			thread.start();
		}	

服务器套接字可以有多个连接。while循环的每次迭代创建一个新的连接。无论何时,只要建立一个新的连接,就创建一个新线程来处理服务器和新客户端之间的通信,这样,就可以有多个连接同时运行。
互相独立运行的线程与指定的客户端进行通信。每个线程创建数据输入输出流问客尸端发送和接收数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值