2016-12-29 188 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

相關問題