C#客户端。将数据从C#Client发送到Java Server

时间:2016-12-29 08:16:49

标签: c# tcpclient

[解决]

我对帖子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

1 个答案:

答案 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,我得到了与您相同的结果:数据已成功发送但收到空响应。

在这些情况下,在调试器中运行两端都会有所帮助。