我可以使用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);
}
}
在客户端知道它可以发送数据之前,是否需要在套接字上发回某些内容?
答案 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);
}
无论如何,在不知道你想要做什么的情况下,我无法再帮助你了。代码可能有效,但我建议重新设计,因为从我的代码片段可以看出,您的代码设计选择不好(尽管这可能来自您的摘要)。