首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网络设计.使用轮询的套接字通信

网络设计.使用轮询的套接字通信
EN

Stack Overflow用户
提问于 2009-03-02 19:39:32
回答 2查看 817关注 0票数 0

关于正在进行的设计和实现的几句话

我向远程应用程序发送了很多请求(当然,运行在不同的主机上),而应用程序则将数据发回。

关于客户端的

Client是一个UI,它生成一个单独的线程来提交和处理请求。一旦它提交了所有的请求,它就调用等待。等待将解析所有来自应用程序的事件,并调用客户端的回调。

下面是等待的实现。

代码语言:javascript
复制
public void Wait (uint milliseconds)
{
       while(_socket.IsConnected)
       {
         if (_socket.Poll(milliseconds, SelectMode.SelectRead))
         {
              // read info of the buffer and calls registered callbacks for the client
              if(_socket.IsAvailable > 0)
                    ProcessSocket(socket);
         }
         else
            return; //returns after Poll has expired
      }
}

等待从一个单独的线程调用,负责管理网络连接:入站和出站流量:

代码语言:javascript
复制
         _Receiver = new Thread(DoWork);
         _Receiver.IsBackground = true;
         _Receiver.Start(this);

此线程是从应用程序的UI组件创建的。

问题:

即使主应用程序按时发送数据,客户端有时也会看到回调的延迟。值得注意的是,Poll中的消息被延迟,直到我的客户端断开连接,然后在内部调用:

代码语言:javascript
复制
_socket.Shutdown(SocketShutdown.Both);

我认为在Poll中发生了一些奇怪的事情

对于如何解决这个问题或其他解决办法,有什么建议吗?

谢谢

如果有什么不清楚的地方请告诉我

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-03 05:19:01

几件事。首先,在您的示例中,"_socket“和”套接字“之间有区别吗?第二,您使用的是System.Net.Sockets.Socket类,对吗?我在MSDN文档中没有看到该类上的IsConnected或IsAvailable属性,因为任何.NET版本都可以追溯到1.1。我想这都是打字错误,对吧?

您是否尝试过在"IsAvailable > 0“测试中添加”Output“子句,并将消息写入控制台/输出窗口,例如,

代码语言:javascript
复制
  if (_socket.IsAvailable > 0) {
      ProcessSocket(socket);
  } else {
      Console.WriteLine("Poll() returned true but there is no data");
  }

这可能会让您了解在程序的更大范围内可能发生的事情。

除此之外,我不太喜欢轮询套接字的数据。作为另一种选择,是否有理由不在套接字上使用异步Begin/EndReceive函数?考虑到您已经在使用单独的线程来发送和接收数据,我认为转换到异步模型是很简单的。这是来自MSDN的示例。此外,我还将使用该机制的典型实现添加到这是如此的帖子中。

票数 1
EN

Stack Overflow用户

发布于 2009-03-02 20:27:18

调用Wait()方法的线程是什么?如果您只是将其放入UI线程池中,这可能就是您有时会遇到延迟的原因。如果这是您的问题,那么要么使用系统线程池,为您的应用程序的网络部分创建一个新线程,要么为它生成一个专用线程。

除此之外,很难在不看到更多代码的情况下帮助您。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/603677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档