从套接字中读取传入的数据?

3
我有一个套接字客户端,想知道正确的方法来读取接收到的数据。目前我正在使用以下函数:
private void _ReadResponsePackets()
{
    while (_socket.Connected)
    {
        try
        {
            byte[] bytes = new byte[1500];
            _socket.Receive(bytes);
            if (bytes.Length > 0)
            LoginserverPackets.Enqueue(bytes);
        }
        catch (Exception ex)
        {
            _log.Write(ErrorType.ERROR, "[LOGINCLIENT] " + ex.ToString(), true);
        }
    }
}

这被称为它自己的线程:
Thread _readDataThread = new Thread(_ReadResponsePackets);
_readDataThread.Start();

正文:
您可以看到,我只是简单地读取并在队列列表上堆叠接收到的数据包,以便进一步进行线程处理,但我的问题是:
  • 我应该在读取函数中使用 Thread.Sleep 还是保持原样?
  • 它会对性能或内存使用产生更大的影响,是作为原样还是使用 Thread.Sleep?

还有其他想法吗?


你考虑过使用异步套接字吗?如果你想看,我有一个使用这个的类,但是网络上也有很多好的例子。 - Jethro
@Jethro实际上我并没有太多的套接字编程背景,所以我想先从这里开始,以便更好地了解这个领域。基本上,在我的情况下使用异步套接字会有什么好处?另外,您对其他问题有什么看法呢?即使我不使用套接字,无限循环和内存消耗仍然是一个问题,哈哈。 - Prix
根据文档,.Connected 属性反映了自上一次发送/接收操作以来的连接状态。http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/f36ec6c4-a47a-4545-b808-118334eefce0/ - Jethro
1
@Jay,就像我之前所说的,我只是想在涉足一些非常不同的东西之前获得一些理解,我这里并没有做什么太复杂的事情,希望它尽可能简单。但我的目标是转向WCF。 - Prix
@Prix,我同意,深入了解事物的工作原理总是很方便的。 :) - Jethro
显示剩余5条评论
1个回答

0
请查看以下链接,套接字将处于阻塞模式,因此您无需使用Thread.Sleep。 Listener

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接