Читать байты из сокета - PullRequest
       4

Читать байты из сокета

0 голосов
/ 17 декабря 2011

Я хочу прочитать точное количество байтов (точную длину) записи в сокет сервером.Например, если сервер пишет «Hello» и в следующий раз пишет сервер («world»).Поэтому мне нужно записать эти две записи как две операции чтения из клиентского сокета.Я реализовал сервер и клиент следующим образом, чтобы продемонстрировать свою проблему.В этом примере выход «out» похож на следующий

1234 ... 89 90 ........ 1034 1035 ...... 2004

то, что я ожидаю, равно 1

2

3

.

.

2004

.

как я могувыполнить это.

//server
 ServerSocket server = new ServerSocket(9999);
        Socket s =server.accept();
        InputStream stream = s.getInputStream();
        byte[] by = new byte[1024];

        while(true){
            stream.read(by);
            String received = new String(by, 0, by.length, "ISO8859_1");
            System.out.println(received);
        }


//client
            Socket s = new Socket("localhost", 9999);
            OutputStream out =s.getOutputStream();
            int i =0;
            while(true){
                i++;
                byte[] msg=Integer.toString(i).getBytes();
                out.write(msg);
            }

Может кто-нибудь, пожалуйста, помогите мне сделать это ..

1 Ответ

3 голосов
/ 17 декабря 2011

Вы не можете напрямую с TCP.TCP - это потоковый протокол, в котором нет сообщений.

Вы должны создать собственный «протокол» выше этого.Самый простой способ - сначала записать количество байтов, которое будет содержать следующее сообщение, затем сообщение.

На стороне клиента вы сначала прочитаете размер сообщения, а затем все сообщение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...