2016-12-29 190 views
-2

[已解决]C#客户端。从C#客户端发送数据到Java服务器

我有类似的问题,发布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

+2

请始终在问题本身中发布代码,而不是通过外部链接,因此如果链接死亡,问题不会变得无用。 –

+0

@PeterB,感谢您的建议,我编辑了这篇文章:) – budiantoip

+0

你不能发送从C#到Java和VV的字节数组,因为Java使用sbyte而不是字节...你应该改变 byte [] data = Encoding.ASCII .GetBytes(txtMessage.Text + ENDOFLINE); – Alrehamy

回答

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我得到了相同的结果,当您:数据得到了成功发送,但收到一个空的回应。

它有助于在这些情况下使两端运行在调试器中。

+0

有趣的是,我要检查开发服务器端的人,希望这能解决我的问题。一旦确认,我会接受您的解决方案。谢谢你的帮助。 – budiantoip

+0

嗨,谢谢你的帮助,我终于找到了正确的解决方案:) – budiantoip

相关问题