在Java的JDK中提供了两个用于实现TCP程序的类,一个是ServerSocket类,用于表示服务器端;一个是Socket类,用于表示客户端。在TCP通信时,首先要创建代表服务器端的ServerSocket对象用于服务器开启服务,此服务会等待客户端的连接;然后创建代表客户端的Socket对象用于客户端向服务器端发出连接请求;在服务器端响应请求后,客户端与服务器之间会建立连接,然后开始通信。TCP通信示意如图13.19所示。
图13.19 TCP通信示意图
使用TCP进行程序设计的一般过程如下:
(1)服务器端创建ServerSocket并绑定某个端口,监听该端口是否有客户端的连接请求。
(2)服务器端使用accept()方法等待客户端的连接。
(3)客户端创建Socket,向服务器指定端口发送连接请求。
(4)服务器与客户端建立连接,开始进行通信。
(5)通信完毕后,客户端关闭Socket,释放资源。
(6)服务器端回到(2),继续监听下一次连接。
TCP交互过程如图13.20所示。
图13.20 TCP交互过程
【例13.8】编写一个简单的TCP程序,实现客户端与服务器端通信。
在项目Chapter13的src目录下新建一个名为cn.pzhu.tcp的包,并在这个包下面创建一个名为Server的类,并在类中编写服务器端程序,关键代码如下:
程序编写完毕之后,运行程序,运行结果如图13.21所示。(www.daowen.com)
图13.21 服务器端运行结果
提示:
在TCP通信的时候,需要先运行服务器端,服务器端需要等待客户端连接,如果先启动客户端程序,客户端将因为找不到服务器端而造成连接失败。
从图13.21可以看出,程序一直处于阻塞状态,这是因为ServerSocket的accept()方法在运行的时候,如果没有接收到客户端的连接请求将一直处于等待状态,直到收到客户端请求。
下面,开始编写客户端程序。在cn.pzhu.udp包下创建一个名为Client的类,并在类中编写客户端程序,关键代码如下:
说明:
上述代码在进行输入输出时,是将字节流InputStream和OutputStream转换为字符流进行操作的。除此之外,其他操作方式也可以,详细用法可以参考第10章输入输出流。
编写之后,程序运行结果如图13.22所示。
客户端在创建Socket时,必须指定服务器地址和端口。当客户端与服务器的连接建立成功之后,客户端会收到来自服务器端的消息:"你好,我是服务器!欢迎你的访问。"
当服务器端收到客户端的连接请求后,会在两者之间建立连接,并开始通信。这是服务器端控制台的显示结果,如图13.23所示。
图13.22 客户端运行结果
图13.23 服务器端接收客户端连接之后的运行结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。