2016-12-29 2 views
-2

[РЕШИТЬ]C# клиента. Передача данных из C# клиент для Java Server

У меня аналогичная проблема на пост 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 not byte ... вы должны изменить byte [] data = Encoding.ASCII .GetBytes (txtMessage.Text + ENDOFLINE); – Alrehamy

ответ

2

Ваш код работает нормально, но только если серверная сторона является совместной.

Я проверил это, имея простую реализацию Java Server из Christian Tucker с немного измененной реализации в перспективе:

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(); 
     } 
    } 
} 

без вызова flush на этой OutputStreamWriter я получил те же результаты, что и вы: данные получили отправить успешно, но получил пустой ответ.

В этих случаях это помогает обоим концам работать в отладчике.

+0

Интересно, я собираюсь проверить того, кто разработал серверную сторону, надеюсь, это решит мою проблему. Я приму ваше решение, как только оно будет подтверждено. Спасибо за вашу помощь. – budiantoip

+0

Привет, спасибо за вашу помощь, я наконец нашел правильное решение :) – budiantoip

Смежные вопросы