Ну ... я знаю, что это было долгое время назад.
Тебе нужно сделать именно то, что сказал Джон, и это ОЧЕНЬ просто. Мне понадобилось 5 часов, чтобы понять это в первый раз ...
Я до сих пор удивляюсь, почему j2ME не включал в себя что-то столь же важное, как метод BufferedReader
для сокетов, это не значит, что чертовы мобильные телефоны с ним рухнут ... и да, я не отдам задницу крысе приложение работает на 1 мс медленнее, чем должно.
(я просто собираюсь поместить соответствующий код, я полагаю, вы знаете, как формировать классы и импортировать необходимые библиотеки)
ServerSocketConnection listener
= (ServerSocketConnection)Connector.open("socket://:1235");
System.out.println("Waiting for connection...");
StreamConnection server = listener.acceptAndOpen();
InputStream is = server.openInputStream();
//Now comes the fake BufferedReader equivalent part
int ch = 0;
StringBuffer sb = new StringBuffer();
while ((ch = is.read()) != -1){
sb.append((char)ch);
if(sb.charAt(sb.length()-1) == 13 ) {
//Carriage return was received or ENTER was pressed
break; //Exit loop and print input
}
}
Как видите, метод is.read()
блокирует поток до получения нового ввода от пользователя ONE BYTE одновременно. Это означает, что если вы используете telnet для тестирования, каждое нажатие клавиши будет повторять цикл один раз, следовательно, мы просто объединяем символ char в символ StringBuffer
до получения символа 13.
System.out.println(sb.toString());
Надеюсь, это поможет людям, пытающимся сделать сервер сокетов на j2ME. Я уже создал полностью функциональную многопоточную версию для Blackberry, на случай, если кому-то понадобится.