为什么在读取TcpListener配置的套接字时没有收到数据?

时间:2014-06-10 18:52:37

标签: c# sockets tcplistener

我可以使用TcpListener在套接字上建立连接,但我无法读取任何数据。我从未通过以下C#代码中的DataAvailable检查(注意,这是一个摘要):

// Listen for a connection
m_host = “127.0.0.1”;
int ListenerPort = 7777;
IPAddress localAddr = IPAddress.Parse(m_host);
TcpListener m_listener = new TcpListener(localAddr, ListenerPort);
m_listener.Start();
TcpClient m_client = m_listener.AcceptTcpClient();
if (m_client.Connected)
{      // We are connected.  Create a stream for handling the RX/TX messaging on the socket.
   NetworkStream clientStream = m_client.GetStream();
   if (clientStream.DataAvailable)
   {      // Read something
      byte[] message = new byte[14];
      int bytesRead = clientStream.Read(message, 0, 14);
   }
}

在客户端知道它可以发送数据之前,是否需要在套接字上发回某些内容?

1 个答案:

答案 0 :(得分:1)

这里发生的是您正在创建TcpListener(即底层套接字),接受连接并立即检查数据。客户端可能还没有发送任何内容,而您在不读取任何内容的情况下离开了外部if子句。根据您的尝试,您可能会尝试类似

的内容
if(m_client.Connected) 
{
    NetworkStream clientStream = m_client.GetStream();
    while(!m_client.DataAvailable) //be careful here - maybe introduce a timeout
    {}
    byte[] message = new byte[14];
    int bytesRead = clientStream.Read(message, 0, 14);
}

无论如何,在不知道你想要做什么的情况下,我无法再帮助你了。代码可能有效,但我建议重新设计,因为从我的代码片段可以看出,您的代码设计选择不好(尽管这可能来自您的摘要)。