在TCP通信程序的时候首先要熟悉的类有:ServerSocket、Socket。ServerSocket套接字实现服务端的等待客户端的请求连接,而Socket套接字是实现两台机器之间的通信。不管是服务器端还是客户端都需要Socket套接字,所以网络编程也可以称之为socket编程。
为了实现客户端与服务器端之间的TCP通信,使用示例程序来试验,并对程序中的错误加以思考:
Server端代码:
Client端代码:
在程序中加入了打印的代码,是为了调试程序,不影响程序的分析。
运行结果:
思考: 从运行结果可以看出,服务器端并没有成功的向客户端写入数据,客户端也并没有成功的向服务端写入数据。这是为什么呢? 按照逻辑是不应该出现这种情况的,Server首先首先向Client写入www.baidu.com, 写完之后就等待接受Client发送过来的数据,Client首先是接受Server写过来的数据,之后就是向Server端写入hello server!, 这在逻辑上的并没错啊,而且所有的输出流都已经flush(), 为什么还是不能实现Server与Client之间的通信呢?
个人理解:程序在逻辑上似乎没有什么问题,但是Server端与Client端不能通信,是不是在建立通信的时候,Server端一上来就读取Client端的数据,而恰恰这是Client端也在等待读取Server端 传过来的数据 。也就是Server端与Client端同时都处在读取的阶段,而readLine()是一个阻塞式方法,如是数据可以读取,他就一直停留不前。所以也就造成了Server端不能与Client端通信的原因。