我正在尝试从概念上讲解我用C#(客户端和服务器)编写的客户端-服务器套接字应用程序的模型。我的服务器需要一次处理多个客户端,最好一次处理多个客户端的请求。我已经设计出一个用于通信的容器,在该容器中,我将在每个消息的开头发送一个固定长度的标头,其中包含(除其他事项外)消息的长度。我在c#中具有套接字编程方面的经验,因此我对使用异步套接字感到很满意。
从概念上讲,我遇到的主要问题是我需要客户端和服务器都能够随时接收消息。客户端将建立连接,并保持“登录”状态(类似于IM客户端),并且它将需要在任意时间接收数据并在任意时间发出请求。作为协议的一部分,我还希望收到对每个请求的响应(从服务器到客户端,或者从客户端到服务器)。
如果可能,我希望能够使用单个插座。我相信我可以使用两个套接字来完成这项工作,一个用于发出服务器->客户端请求,另一个用于客户端->服务器请求,但是我不想处理两个端口/连接带来额外的麻烦。但是,我不确定使用单个套接字时如何管理发送请求和在它们可能被交错时如何获取响应。
在搜索中找不到相似服务器或客户端的任何示例。感谢任何提供想法的人。
是的,这很有道理。谢谢您,对您有很大帮助!
– JarrodMay 20, 2009 13:54对不起,所有关于套接字的讨论都让我觉得您的问题就在那个水平上。此更新如何?
– Neil WilliamsMay 19, 2009 21:58是的。但是,假设服务器需要花费一定时间从客户端请求某些内容。同时,客户端向服务器请求某些东西。在服务器的BeginReceive中,我如何知道传入的数据是来自客户端的请求,还是对服务器请求的响应?这就是我在努力的目标。我有异步套接字的基础。谢谢。
– JarrodMay 19, 2009 21:46对不起,我很难回答我的问题……但这正是我一直在试图解决的问题。我曾考虑过使用请求ID和字典,但想知道如何实现一种方法来发出请求并阻塞直到结果出现(并返回结果),而在我的请求状态对象中不使用ResetEvent之类的东西。不好为每个请求创建那些请求吗?谢谢。
– JarrodMay 19, 2009 22:05