【问题标题】:C# Client. Sending Data from C# Client to Java ServerC# 客户端。从 C# 客户端向 Java 服务器发送数据
【发布时间】:2017-01-04 14:13:59
【问题描述】:

[已解决]

我与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

【问题讨论】:

  • 请始终在问题本身中发布代码,而不是通过外部链接,因此如果链接失效,问题不会变得无用。
  • @PeterB,谢谢你的建议,我已经编辑了帖子:)
  • 您不能将字节数组从 C# 发送到 Java 和 VV,因为 Java 使用的是 sbyte 而不是 byte ...您应该更改 byte[] data = Encoding.ASCII.GetBytes(txtMessage.Text + ENDOFLINE);
  • @Alrehamy 好的,让我试试你的解决方案。
  • @alrehamy,我无法让它工作,你有样本或者我可以阅读的文章吗?

标签: c# tcpclient


【解决方案1】:

您的代码可以正常工作,但前提是服务器端是合作的。

我通过 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,我得到了和你一样的结果:数据成功发送,但收到一个空响应。

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

【讨论】:

  • 有趣,我要检查开发服务器端的人,希望这能解决我的问题。一旦确认,我将接受您的解决方案。感谢您的帮助。
  • 您好,谢谢您的帮助,我终于找到了正确的解决方案:)
猜你喜欢
  • 2016-02-23
  • 2015-12-26
  • 2014-04-08
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 2015-02-17
  • 2014-09-07
  • 2015-02-10
相关资源
最近更新 更多