【发布时间】:2013-11-20 18:38:47
【问题描述】:
我正在尝试编写一个客户端应用程序,它连接到指定端口上的服务器并接收数据。
我找到了this fine example,但我的问题是服务器一直在向我发送数据(没有关闭连接),因此 ReceiveCallback 永远不会结束,因为 client.EndReceive(ar) 永远不会返回 0。
所以,我的 WinForm 在接收数据时卡住了。
这个想法是监视所有传入的数据并在某些情况下进行一些回调。
我是 C# 新手,你能指出我正确的方向吗?多线程?
【问题讨论】:
-
我认为您正在寻找的词是“连续”而不是“无限”。您可能希望在工作线程中处理接收。
-
是的,你需要有一个单独的线程来处理等待接收和处理数据。看来您已经为自己指明了正确的方向。那里有很多关于该主题的信息。
-
BeginReceive() 的回调不会发生在主 UI 线程上,因此当您调用 EndReceive() 时,您也不在那里。因此接收连续数据不是问题。但是,如果您立即 Invoke() 回到主 UI 线程,那么我可以看到消息队列被淹没。一种可能性是将数据放入某种全局缓冲区中,然后仅定期从表单中的 Timer() 更新您的 UI 或数据。您能否提供有关数据的更多详细信息以及您正在使用它做什么?
-
显示一些代码。特别是,显示对
BeginReceive的调用,并显示您的接收回调函数。我怀疑问题出在您认为的其他地方。
标签: c# multithreading sockets