关于java Socket的异步调用,思路问题,100元现金报酬
我本来利用Socket通信,我的思维步骤是这样的:客户端发送数据,服务端接收数据,服务端返回数据,客户端接收数据。但我发现这里存在一个问题。服务端接收和发送数据,在一个线...
我本来利用Socket通信,我的思维步骤是这样的:
客户端发送数据,服务端接收数据,服务端返回数据,客户端接收数据。但我发现这里存在一个问题。
服务端接收和发送数据,在一个线程里面,这没有什么问题,因为服务端先接收然后分析数据然后发送数据,逻辑就是这样子,在一个线程里可以这样完成。
但客户端就很奇怪,我客户端也是在一个线程里发送和接收,发送好说,但发送完即执行接收好像逻辑上不对,因为返回的数据是服务器发送的。这就很神奇了。更神奇的是,我发送完数据,把发送数据的那一端挂机(shutupdown),然后接收数据,居然能接收到。
我想了很久,觉得不对,首先Socket是一个长连接,而我只能保持一次通话。第二Socket客户端的接收应该是个异步事件,不可能在同一线程下。也或许客户端服务端的发送和接收都是一个异步事件。
客户端的异步事件很好理解,只是异步读和写,那服务端异步事件前还要线程循环获取连接的Socket,这是怎么回事呢,服务端既要接收连接的客户端,又要异步读写,这怎么实现呢?
我的问题就是这样,我想了解客户端调用异步读写的原因,服务读实现循坏读取连接的Socket,和连接Socket的异步读写。
如果能用浅显的道理让我明白,我愿意付出100元的话费,做为您的酬劳。 展开
客户端发送数据,服务端接收数据,服务端返回数据,客户端接收数据。但我发现这里存在一个问题。
服务端接收和发送数据,在一个线程里面,这没有什么问题,因为服务端先接收然后分析数据然后发送数据,逻辑就是这样子,在一个线程里可以这样完成。
但客户端就很奇怪,我客户端也是在一个线程里发送和接收,发送好说,但发送完即执行接收好像逻辑上不对,因为返回的数据是服务器发送的。这就很神奇了。更神奇的是,我发送完数据,把发送数据的那一端挂机(shutupdown),然后接收数据,居然能接收到。
我想了很久,觉得不对,首先Socket是一个长连接,而我只能保持一次通话。第二Socket客户端的接收应该是个异步事件,不可能在同一线程下。也或许客户端服务端的发送和接收都是一个异步事件。
客户端的异步事件很好理解,只是异步读和写,那服务端异步事件前还要线程循环获取连接的Socket,这是怎么回事呢,服务端既要接收连接的客户端,又要异步读写,这怎么实现呢?
我的问题就是这样,我想了解客户端调用异步读写的原因,服务读实现循坏读取连接的Socket,和连接Socket的异步读写。
如果能用浅显的道理让我明白,我愿意付出100元的话费,做为您的酬劳。 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询