TCP Socket 当两个节点对话时 "flow of events" 是什么

TCP Socket What is the "flow of events" when two nodes talk

关于我之前在这里的问题,Previous Question,让我试着用外行的方式问我的问题(因为我了解事情才能问我的问题)。

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

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

我希望能够做的事情:

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

  6. 现在,我希望我的客户端冷静下来,闲逛,什么都不做,直到我触发它 send method 向服务器发送新数据。

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

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

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

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

在示例中,客户端和服务器在发送数据后通过回调进行连接,以接收从另一端返回的数据。这是套接字必须的吗?或者这与异步套接字有关?

如果是这样,我是否需要在收到任何数据后立即回复,这并不总是我的本意?我是否必须来回 ping <--> pong 直到我最终完成套接字连接工作?

我希望我的问题有道理。我希望更好地理解当两个节点交谈时 "expected" 会发生什么...

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

因此:如果您想要执行的操作不起作用,则问题出在您的代码中(或您用于通过套接字进行抽象的任何库)。你描述的可以做的很好