TCP套接字当两个节点交谈时,“事件流”是什么

时间:2019-05-28 12:15:57

标签: .net sockets tcp client-server socketserver

关于我在这里的上一个问题Previous Question,让我尝试以外行的方式提出我的问题(因为我理解问题是为了提出我的问题)。

我正在构建一个TCP客户端<->服务器应用程序。

帮助我了解客户端和服务器进行对话的正确事件协议(应该是)。

我希望能够做些什么:

  1. 服务器监听。
  2. 客户端连接到服务器。
  3. 客户端将字符串发送到服务器。
  4. 服务器接收数据
  5. 服务器回复(我手动发送了"<ok>" string

  6. 现在,我希望我的客户端冷静下来,出去玩,什么也不做,直到我将send method触发后才能将新数据发送到服务器。

  7. 然后我希望服务器接收到所述数据,并重复步骤5(Reply)。

在我的示例中,我正在使用Microsoft提供的异步套接字示例的代码。我可以发送字符串,服务器可以回复。

然后,我故意不将任何内容发送回服务器,直到需要(考虑聊天应用程序)为止。当我最终决定将数据发送到服务器时,我的客户端套接字发送了数据,但服务器从未收到此新的传入数据。 (接收不会触发)

我假设服务器在上次数据交换中发送"<ok>"字符串后,服务器仍在等待来自客户端的回调。 "<ok>"之后,我再也没有做过任何回送,因为我已经完成了我想做的任何工作。 (例如,发送“ hello”字符串)。

在该示例中,客户端和服务器在发送数据后通过回调连接,以从另一端接收数据。这是插座的必需品吗?还是与异步套接字有关?

如果是这样,我是否需要在收到任何数据后立即回覆,这并不总是我的意图?我是否必须来回乒乓---直到最终可以完成套接字连接的工作?

我希望我的问题有意义。我希望更好地了解当两个节点通话时会发生什么“预期” ...

1 个答案:

答案 0 :(得分:1)

在套接字上,发送和接收管道完全断开且独立。只要代码编写正确,您就可以完全独立地进行处理,并且发送和接收之间没有特定的依赖关系-您可以仅发送,仅接收,或者可以单独发送和接收,而不必期望自己总是这样做一个然后另一个。在非常简单的场景中,客户端倾向于先发送然后接收,服务器倾向于先接收然后发送,但这仅仅是因为这是请求/响应模式(当客户端启动时) ),而不是因为套接字固有的任何原因。

因此:如果您要执行的操作不起作用,则问题出在代码中的某个位置(或您用于通过套接字抽象的任何库)中。您描述的内容可以很好地完成。