2014-12-02 22 views
0

Я хочу записать строку на сервер сокета в java в байтах, а затем получить ответ (известная длина байтов).Пишите на сервер сокета python в java

Я огляделся, и есть много учебников, но я не могу найти определенную функцию для обработки байтов, также, похоже, я не могу выполнять функции. Это остается красным.

import java.io.*; 
import java.net.Socket; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 


public class SocketTest { 

    public static void main(String [] args) throws IOException { 


     String hostName = "localhost"; 
     int portNumber = 10000; 

     try (

       //open a socket 
       Socket clientSocket = new Socket(hostName, portNumber); 


       BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
       PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 


     ) { 

      System.out.print("Something went wrong"); 

     } 

} 


    try { 

     out.XXX; //can't seem to execute any function on this. 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

ответ

1

Прежде всего: вы неправильно используете инструкцию try-with-resources.

синтаксис:

try (
    // declare and open resources here 
) { 
    // use these resources here 
} 
// resources are closed here, before you even try to... 
catch (SomeException e) { 
    // catch exceptions 
} 

Затем в Java, у вас есть OutputStream с и Writer с; первые байт записи, второй символ записи; если обертывает OutputStream, вам необходимо указать кодировку, из которой будет создан кодер, который преобразует ваши символы в байты перед отправкой «по проводу».

В том же духе у вас есть InputStream s и Reader s, которые имеют те же отношения.

В общем случае, если вы не указали кодировку для использования для Reader s или Writer s, используется значение по умолчанию - и это может быть или не быть UTF-8.

В своем коде, то:

  • записать байт в первый блок после try;
  • указать a Charset использовать для ваших Reader и Writer;
  • Если вы используете буферизацию на стороне записи, не забудьте указать .flush() после того, как вы напишете (хотя закрытие сокета будет автоматически сбрасываться).

Остальное остается как упражнение!

+0

Большое спасибо! Неправильное использование try было путаницей проверки ошибок. Я попробую писателя. – dorien