Добрый день. Есть стандартный клиент на java | Код | import java.io.*; import java.net.*; import java.util.*;
public class SocketClient { // ------------------------------------------------------- // main // Метод, получающий управление при запуске приложения // ------------------------------------------------------- public static void main(String args[]) { // Массив для ввода строки с клавиатуры byte bKbdInput[] = new byte[256];
// Сокет для связи с сервером Socket s;
// Входной поток для приема данных от сервера InputStream is;
// Выходной поток для передачи данных серверу OutputStream os;
try { // Выводим строку приглашения System.out.println("Socket Client Application" + "\nEnter any string or 'quit' to exit..."); } catch(Exception ioe) { // При возникновении исключения выводим его описание // на консоль System.out.println(ioe.toString()); }
try { // Открываем сокет s = new Socket("192.168.0.9 ",6000); if(s.isConnected()) { System.out.println("Ok Connection"); // Создаем входной поток для приема данных от сервера is = s.getInputStream();
// Создаем выходной поток для передачи данных серверу os = s.getOutputStream();
// Буфер для передачи данных byte buf[] = new byte[512];
// Размер принятого блока данных int length=1;
// Рабочая строка String str;
// Вводим команды и передаем их серверу while(true) { // Читаем строку команды с клавиатуры
length = System.in.read(bKbdInput); // bKbdInput="hhhh".getBytes(); // bKbdInput[4]="10"; // Если строка не пустая, обрабатываем ее if(true) { // Преобразуем строку в формат String str = new String(bKbdInput, 0);
// Обрезаем строку, удаляя символ конца строки StringTokenizer st; st = new StringTokenizer(str, "\n"); str = new String((String)st.nextElement());
// Выводим передаваемую строку команды // на консоль для контроля System.out.println("> " + str);
// Записываем строку в выходной поток, // передавая ее таким образом серверу if(s.isConnected()) { os.write(bKbdInput,0,bKbdInput.length); } // Сбрасываем буфер выходного потока os.flush();
// Принимаем ответ сервера length = is.read(buf); if(length == -1) break;
// Отображаем принятую строку на консоли str = new String(buf, 0); st = new StringTokenizer(str, "\n"); str = new String((String)st.nextElement()); System.out.println(">> " + str);
// Если введена строка 'quit', завершаем // работу приложения if(str.equals("quit")) break; } } // Закрываем входной и выходной потоки is.close(); os.close(); // Закрываем сокет s.close();
}
} catch(Exception ioe) { System.out.println(ioe.toString()); }
try { System.out.println( "Press <Enter> to terminate application...");
System.in.read(bKbdInput); } catch(Exception ioe) { System.out.println(ioe.toString()); } } }
|
и есть сервер на Delphi После запуска клиента, вводим текст и он отправляет на дельфи этот текст( В Delphi Сначало срабатывает обработчик на connect потом на execute ).. Все работает.. Но если убрать код ввода текста с клавиатуры и заменить его на | Код | bKbdInput="hhhh".getBytes();
|
то в Дельфи срабатывает оработчик только на connect , а данные не приходят.. Вопрос, что может быть не так,и как решить данный вопрос?) Это сообщение отредактировал(а) Su_ - 3.1.2010, 17:19
|