关于我在这里的上一个问题Previous Question,让我尝试以外行的方式提出我的问题(因为我理解问题是为了提出我的问题)。
我正在构建一个TCP客户端<->服务器应用程序。
帮助我了解客户端和服务器进行对话的正确事件协议(应该是)。
我希望能够做些什么:
服务器回复(我手动发送了"<ok>"
string
)
现在,我希望我的客户端冷静下来,出去玩,什么也不做,直到我将send method
触发后才能将新数据发送到服务器。
然后我希望服务器接收到所述数据,并重复步骤5(Reply)。
在我的示例中,我正在使用Microsoft提供的异步套接字示例的代码。我可以发送字符串,服务器可以回复。
然后,我故意不将任何内容发送回服务器,直到需要(考虑聊天应用程序)为止。当我最终决定将数据发送到服务器时,我的客户端套接字发送了数据,但服务器从未收到此新的传入数据。 (接收不会触发)
我假设服务器在上次数据交换中发送"<ok>"
字符串后,服务器仍在等待来自客户端的回调。 "<ok>"
之后,我再也没有做过任何回送,因为我已经完成了我想做的任何工作。 (例如,发送“ hello”字符串)。
在该示例中,客户端和服务器在发送数据后通过回调连接,以从另一端接收数据。这是插座的必需品吗?还是与异步套接字有关?
如果是这样,我是否需要在收到任何数据后立即回覆,这并不总是我的意图?我是否必须来回乒乓---直到最终可以完成套接字连接的工作?
我希望我的问题有意义。我希望更好地了解当两个节点通话时会发生什么“预期” ...
答案 0 :(得分:1)
在套接字上,发送和接收管道完全断开且独立。只要代码编写正确,您就可以完全独立地进行处理,并且发送和接收之间没有特定的依赖关系-您可以仅发送,仅接收,或者可以单独发送和接收,而不必期望自己总是这样做一个然后另一个。在非常简单的场景中,客户端倾向于先发送然后接收,服务器倾向于先接收然后发送,但这仅仅是因为这是请求/响应模式(当客户端启动时) ),而不是因为套接字固有的任何原因。
因此:如果您要执行的操作不起作用,则问题出在代码中的某个位置(或您用于通过套接字抽象的任何库)中。您描述的内容可以很好地完成。