Я могу подключиться к сокету с помощью TcpListener, но я не могу читать данные. Я никогда не прохожу мимо проверки 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);
}
}
Нужно ли что-то нужно отправить обратно в сокет, прежде чем клиент узнает, что он может отправлять данные?
Здесь происходит то, что вы создаете 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);
}
В любом случае, не зная, что именно вы пытаетесь сделать, я больше не могу вам помочь. Код может работать, но я бы предложил редизайн, поскольку из того, что я могу сказать по вашему фрагменту, ваш код страдает от плохого выбора дизайна (хотя это может возникнуть из вашего резюме).