Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Отправка String в ByteBuffer


Автор: Ma100DON 14.5.2012, 09:56
Доброго времени суток, уважаемые. 
Столкнулся с некой проблемой. Не отправляется строка типа String в ByteBuffer. Отправляю таким кодом
 
Код

String charSequence = "STS/1.0 200 OK\r\nl:229\r\ns:1R\r\n\r\n<Reply></Reply>\n";

String stringToConvert = charSequence;
byte[] theByteArray = stringToConvert.getBytes();
data.put(new byte[2]);
data.putChar((char)charSequence.length());
data.put(theByteArray);


Далее при просмотре в снифере пакетов я не нахожу отправку пакета от сервера. Подскажите, где я ошибаюсь? 

Автор: LSD 14.5.2012, 11:08
1. Так: 
Цитата(Ma100DON @  14.5.2012,  10:56 Найти цитируемый пост)
getBytes()
 делать нельзя! Надо всегда в обязательном порядке указывать кодировку.
2. В чем смысл: data.put(new byte[2]) зачем писать неинициализированный массив?
3. Откуда берется ByteBuffer.

Автор: Ma100DON 14.5.2012, 11:27
Цитата(LSD @  14.5.2012,  11:08 Найти цитируемый пост)
1. Так: 
Цитата(Ma100DON @  14.5.2012,  10:56 )
getBytes()
 делать нельзя! Надо всегда в обязательном порядке указывать кодировку.
2. В чем смысл: data.put(new byte[2]) зачем писать неинициализированный массив?
3. Откуда берется ByteBuffer. 



ByteBuffer берётся 
Код

private final ByteBuffer WRITE_BUFFER, READ_BUFFER;


MMOConnection<T> con = (MMOConnection<T>) key.attachment();

        ByteBuffer buf;

        if((buf = con.getReadBuffer()) == null)
            buf = READ_BUFFER;


Автор: LSD 14.5.2012, 12:20
Сформулируем по другому, как связан ByteBuffer и сеть? Если используется SocketChannel то данные из ByteBuffer надо явно записывать в канал (http://www.java2s.com/Tutorial/Java/0320__Network/UseByteBufferforSocketcommunication.htm).

Автор: Ma100DON 14.5.2012, 12:28
Да, ByteBuffer по сети завязан с SocketChannel. 
Цитата(LSD @  14.5.2012,  12:20 Найти цитируемый пост)
то данные из ByteBuffer надо явно записывать в канал


Мне отправлять нужно в ByteBuffer, приём у меня нормально работает. 

Автор: LSD 14.5.2012, 12:58
Цитата(Ma100DON @  14.5.2012,  13:28 Найти цитируемый пост)
Мне отправлять нужно в ByteBuffer, приём у меня нормально работает.

ByteBuffer сам по себе данные никуда не отправляет, это просто временный буфер. Есть подозрение, что у тебя не работает отправка данных из буфера в SocketChannel.

Автор: Ma100DON 14.5.2012, 16:21
Спасибо за советы. Психонул, да с нуля всё написал, хватит юзать примеры. Всё отлично. 
Тему можно закрыть. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)