【问题标题】:Tcp client and server at same timetcp客户端和服务器同时进行
【发布时间】:2018-05-21 11:12:27
【问题描述】:

我必须实现一个与服务器的客户端通信接口,这有点奇怪,我对如何开发它感到怀疑。

通信遵循以下规则:

  1. 仅通过 TCP 完成。
  2. 客户端向服务器发送一个标识自己的 XML。
  3. 如果服务器响应正常,客户端开始监听来自服务器的传入请求。

TcpClient 可以充当服务器吗? 实现这一点的最佳方法是什么?

提前致谢。

【问题讨论】:

  • 当您说“如果服务器响应正常,则客户端开始侦听来自服务器的传入请求。”你的意思是服务器期望客户端打开一个它可以连接的端口,或者它发送请求到客户端发起的同一个连接?
  • @DaisyShipton 它通过客户端发起的同一连接发送请求。实际上,服务器充当代理。其他一些客户端向服务器发出请求,服务器重定向到我的客户端,我的客户端响应服务器,服务器向发出请求的客户端发送响应。
  • 不要陷入 TCP 初学者的常见错误。 TCP 是双向的无穷无尽的字节流。它不执行 messages,因为您不会在一端得到 1-1 匹配的 Send/Write 调用与调用 Receive/Read在另一端。如果您想要 messages(或请求/响应,或任何您想调用它们的名称),则由 you 在无穷无尽的字节流上实现消息传递(或移至为您实现这些的更高级别的协议)

标签: c# tcpclient tcplistener


【解决方案1】:

一旦建立连接,“客户端”和“服务器”之间就没有明显区别了。只有一个 TCP 流可用于双向传递信息。你应该可以使用TcpClient,因为听起来你不需要监听新的连接或类似的东西;您只需要从现有流中读取请求并提供响应。

【讨论】:

  • 好的,我明白了,谢谢。问题是如何处理多个请求,因为它不是真正的服务器。这是我的主要头痛
  • @Merrin:我们需要了解更多细节才能提供帮助。我建议您提出一个新问题,详细说明请求和响应的协议是什么样的、您已经尝试过什么以及出了什么问题。
  • 好的,我会这样做的。感谢您的耐心等待
【解决方案2】:

与服务器建立连接后,客户端可以发送或接收任何数据。所以如果你只是想监听来自服务器的请求:

while(client.Connected)
{
   client.Client.Receive(data);
   DoSomething(data);
}

【讨论】:

    猜你喜欢
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2016-07-28
    相关资源
    最近更新 更多