[解决]
我对帖子here有类似的问题,已经遵循了所有答案,但得到了空字符串作为回复。
数据。
这是我的代码:
try
{
string ENDOFLINE = "\r\n";
TcpClient client = new TcpClient(txtIP.Text, Int32.Parse(txtPort.Text));
NetworkStream stream = client.GetStream();
byte[] data = Encoding.ASCII.GetBytes(txtMessage.Text + ENDOFLINE);
stream.Write(data, 0, data.Length);
String responseData = String.Empty;
Int32 bytes = stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
Console.WriteLine("Received: {0}", responseData);
stream.Close();
client.Close();
}
catch(Exception ex)
{
Console.WriteLine(ex.message);
}
解决方案:
在发送消息后和接收响应之前立即断开连接。我遵循了article
答案 0 :(得分:2)
您的代码工作正常但仅限于服务器端是合作的。
我通过使用Christian Tucker中的简单java服务器实现测试它,并略微改变了运行实现:
public void run()
{
while(isRunning)
{
try
{
clientSocket = serverSocket.accept();
System.out.println("Client Connected from " + clientSocket.getInetAddress().getHostAddress() + ":" + clientSocket.getPort());
recv = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
System.out.println("Data Recieved: " + recv.readLine());
// make sure to send something back ...
OutputStreamWriter wr = new OutputStreamWriter(clientSocket.getOutputStream());
wr.write("FuBar!\r\n");
// and flush!
wr.flush();
clientSocket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
如果没有在OutputStreamWriter上调用flush
,我得到了与您相同的结果:数据已成功发送但收到空响应。
在这些情况下,在调试器中运行两端都会有所帮助。