【问题标题】:How can I make my TCP Socket Server Async?如何使我的 TCP 套接字服务器异步?
【发布时间】:2014-05-13 04:25:57
【问题描述】:

我目前制作了一个多合一的点对点“聊天”程序。它目前使用计时器来接收消息,并使用客户端将它们发送给运行该程序的其他人。我真的很想让整个系统异步,所以我不再抱怨主要可执行文件冻结等。

我已将所有代码 (VB.net) 粘贴到此处:http://pastebin.com/EcrtCgVc

有人可以帮助我使这个系统更快、异步或做得更好。

如果您想要完整源代码的保管箱的链接,我也可以提供。

【问题讨论】:

  • 这不是 gimmez dA codez 类型的网站。你读过异步套接字方法吗?询问您设计中的具体问题或尝试使用异步方法时的具体问题。但是,首先将套接字代码分解为一个自己的类。不要将 GUI 代码与业务代码混用。你也可以试试我的网络库 Griffin.Networking。这是一个示例聊天客户端/服务器:github.com/jgauffin/Samples/tree/master/Griffin.Networking/…

标签: vb.net sockets asynchronous tcpclient tcplistener


【解决方案1】:

我建议你看看这个示例项目:

异步服务器套接字示例

http://msdn.microsoft.com/en-us/library/fx6588te%28v=vs.110%29.aspx

你可以和这个例子一起使用:

异步客户端套接字示例

http://msdn.microsoft.com/en-us/library/bew39x2a%28v=vs.110%29.aspx

您可能需要在服务器代码中使用异步方法,并且您可以使用 Delegate Sub 使您的服务器在另一个线程中运行,因此主线程 (UI) 仍会响应。 http://msdn.microsoft.com/en-us/library/ms172879.aspx

【讨论】:

    【解决方案2】:

    不看你的代码,我也在做套接字编程。 “不要将 GUI 代码与业务代码混用。” 就像 jgauffin 说的,你不应该把后台运行的代码和 GUI 结合起来。

    例如,如果您使用套接字来接受数据或连接,则必须在新线程上运行该方法。 示例...

    Public Sub YourMainSub()
        Dim threadOne As New System.Threading.Thread(AddressOf ListenCode)
        threadOne.Start()
        'Put other code here.....
    End Sub
    Public Sub ListenCode()
        Dim newPerson = yourServer.Accept()
        'Or
        Dim newData = yourServer.Receive()
    End Sub
    

    抱歉,如果代码不完全正确。我是凭记忆输入的。

    【讨论】:

      猜你喜欢
      • 2013-05-15
      • 1970-01-01
      • 2011-07-13
      • 2015-06-07
      • 1970-01-01
      • 2012-10-01
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多