【问题标题】:multiple clients - one server connection with sockets tcp/ip c# .net多个客户端 - 一个带有套接字 tcp/ip c# .net 的服务器连接
【发布时间】:2011-02-21 10:09:57
【问题描述】:

我需要开发一个客户端服务器系统,我可以让多个客户端同时与一台服务器通信。我想与 xml 序列化对象进行通信,还需要发送和接收其他命令来调用方法。现在,我刚开始在 C# 和 .Net 中进行套接字编程,发现异步 I/O 是要走的路,这样这些方法就不会阻塞代码的执行。还有很多例子说明如何

制作一个简单的客户端服务器系统。所以我对它的工作原理有一个基本的了解。

无论如何,我仍然不清楚的是如何设置可以管理与多个客户端的连接的服务器? 我可以为每个连接创建一个新的套接字,然后将它们存储在某种列表中吗? 我需要某种多路复用来实现这一点吗? 我必须在多个端口上监听吗? 这里最好的方法是什么?

另一件事是如果我需要开发自己的协议来区分我实际通过网络发送的内容 --> xml 序列化对象或可能只是用 ascII 或其他东西编码的字符串的命令。还是我会开发自己的协议来发送这些命令?

感谢任何形式的帮助!如果有人知道一本涵盖此类内容的好书,请告诉我。干杯

我忘了提到我的一些应该与我的服务器通信的客户端将是 pda,因此我使用紧凑的框架......所以这可能会带来一些限制......

【问题讨论】:

    标签: c# .net sockets client


    【解决方案1】:

    您可能会发现我的一些 TCP/IP .NET 常见问题解答条目很有帮助,尤其是 using a socket as a server socket,它解释了侦听服务器如何创建新的客户端连接,以及 XML over TCP/IP,它讨论了您必须为 XML 做出的决定-通过 TCP/IP 协议。

    【讨论】:

    • 只需阅读您在上面发布的链接。那真的很有用。我没有得到的是本地端口是什么意思?假设我正在端口 8221 上监听任何 IP 地址。然后如何创建一个新的套接字来处理与本地端口的传入连接?那么客户端是否也必须更改端口,或者它是如何工作的?非常感谢!
    • 绑定到未使用的本地端口的新套接字的创建,以及客户端到新套接字的迁移,都由 TCP/IP 堆栈为您处理。因此,就服务器代码而言,您可以继续在 8221 上监听;并且就客户端代码而言,它已成功连接到 8221(尽管它实际上与服务器的 TCP/IP 堆栈选择的动态端口进行通信)。
    • 我不明白的是,我的监听“服务器套接字”如何将连接传递给新创建的套接字。我建议我有一个套接字并调用 BeginAccept,如下所示: socket.BeginAccept(new AsyncCallback ( OnClientConnect ),null);但是在我的 OnClientConnect 回调中,如何将此连接传递给新套接字?
    • 对不起!我的错。没有看到 Accept() 方法返回一个新的套接字!感谢您的帮助。
    【解决方案2】:

    我会放弃您使用 Sockets 并切换到 WCF Windows Communication Foundation 的计划。它更加优雅,旨在以比 .NET 套接字更容易和更简单的方式完成您想要的所有事情。

    如果您想了解如何使用它,可以使用 Michele Leroux Bustamante 编写的一组令人惊叹的 Microsoft webcasts,让您立即启动并运行。

    【讨论】:

    • 好的。我会看看它。问题可能是我的客户实际上是 PDA,因此在我使用 Compact Framework 进行实施时受到一些限制。当然,服务器不会是 PDA。所以我也许可以利用 WCF 来实现服务器。感谢您的提示!
    • 现在我发现 WCF 在紧凑框架中也可用。 WCF 是否也可以从客户端提取数据?
    • 绝对。您可以使用回调设置双向 WCF,因此服务器可以调用客户端上的方法(可以有返回参数)。我使用 WCF 设置了一个客户端/服务器游戏,它来回发送大量信息。完全没问题!
    • 好吧。这听起来真的很好。我会看看。非常感谢!也许您知道一些关于如何使用回调实现双向 WCF 的教程。那很好啊。无论如何,谢谢。
    • 您不知道一般pda是否可以进行双向通信?干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多