【问题标题】:Identify the socket with multiple async tcp clients识别具有多个异步 tcp 客户端的套接字
【发布时间】:2015-06-11 01:03:18
【问题描述】:

我的应用程序有许多 tcpclients 用于在收到指示时更新数百个服务器。我在设计中遇到了一个小但重要的问题。

我的程序从队列中取出一条传出消息,并从一组客户端中选择一个可用的客户端,我将其命名为 client1。它使用 BeginConnect 在 tcpclient 上启动连接并发出回调方法。然后程序继续处理队列中的其他消息以及将要发送它们的 tcpclients。

当客户端 1 发生回调时,我的程序会获得一个 AsyncResult,我可以从中解析套接字。

这是我的问题。我怎么知道我有哪个套接字或 TCPClient?这很重要,因为我需要知道在这个连接的客户端上发送哪条消息。

我查看了套接字,但没有找到 name 属性。

如何识别套接字,以便知道要进行的正确消息对话?

谢谢!

【问题讨论】:

  • 您是否检查过该对象是否公开了诸如 Ipaddress 或名称 ..etc...之类的内容?如果不尝试谷歌搜索stackoverflow.com/questions/2717381/…,这可能会给你一些想法
  • 您的每个客户端是否都连接到唯一的服务器(IP 地址/端口),或者您的每个客户端是否使用唯一的本地端点(IP 地址/端口)?
  • MethodMan,很好的发现。我花了大约一个小时在多个客户端下查看,只得到了服务器示例,哈哈哈。
  • Sharfer,每个客户端都有一个唯一的 IP,但它们都使用相同的端口。

标签: c# .net tcp tcpclient


【解决方案1】:

经过更多的研究和研究,我意识到回调可以传递任何 System.Object。因此,答案就像将 TCPClient 包装在一个具有可以识别其用途的属性的类中一样简单。

在我的例子中,一个简单的类,它有一个 Socket、一个用于消息的字符串、一个用于 IP 的字符串和一个用于端口的 int,就足以处理回调时的情况。请记住,您必须将 IAsyncResult.AsyncState 转换回包装类的类型。

【讨论】:

    猜你喜欢
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2014-04-07
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多