|
1 / 1 / 1
Регистрация: 18.08.2007
Сообщений: 289
|
|
Дискуссия по сокетам в Java24.06.2008, 23:24. Показов 1181. Ответов 1
Метки нет (Все метки)
Интересная дискуссия:
http://groups.google.com/groups?hl=ru&threadm=3CBD5DEC.50793BBF%4 0overta.ru&prev=/groups%3Fhl%3Dru%26group%3Dfido7.ru.java [code] От:Victor Knysh (victor.knysh@prodigy.net) Заголовок:Сокеты Группы новостей:fido7.ru.java View: Complete Thread (4 articles) | Original Format Число:2002-04-16 19:40:38 PST День добрый, Подскажите мысль или ткните носом, где я промахнулся. Перерыл всё что мог и не могу понять в чём дело. Есть простейший сервер на одного клиента и есть клиент. Сервер слушает порт. Клиент присоединяется и пишет данные в сокет. Сервер вычитывает из сокета послание и кидает туда же ответ. Всё. Пример прямо как книжный и должен работать и конечно же не работает. При попытке вычитать из сокета - сервер вытягивает всё, что туда влил клиент и замирает потому как не может получить свою -1 из read(). Или точнее, read() ждёт флажка окончания данных в буффере и никак не дождётся. В тоже время если лить данные клиенту - то такого не происходит - клиент вычитывает свои данные , получает -1 и жизнь продолжается. Вот и вопрос, что же происходит ? Коды одинаковы, за исключением, что на серверной стороне я получаю сокет из ServerSocket.accept() . Пробовал под Солярисом и под Вынь2000. Одинаковый результат. И что более занятное с клиентом писанным на Перле всё работает. А вот Жаба не хочет.... 8( Скорее всего я чегото недопонимаю, но вот чего ? Я конечно могу поиграться с тайм-аутами и лингерами, но смысл ? Ведь так не должно быть судя по умным книжкам...8((((( Спасибо за внимание. Тут ниже привожу коды. Сильно упрощённые, но неработающие ...8) Вик =========== Client.java ============= import java.io.*; import java.net.*; public class Client{ int port = 5204; Client(){} private void start() throws Exception{ Socket inSocket = new Socket('vic', port); System.out.println('Opened:'+inSocket.to String()); InputStream is = inSocket.getInputStream(); StringBuffer inData = new StringBuffer(); OutputStream os = inSocket.getOutputStream(); os.write(('TEST ').getBytes()); os.flush(); System.out.println('Sent...'); StringBuffer inData = new StringBuffer(); int buff = 0; for( ;(buff=is.read()) != -1 ; inData.append((char)buff)); System.out.println('Last buff='+buff); System.out.println('Got:'+inData.toStrin g()); inSocket.close(); } public static void main(String[] args) throws Exception{ Client client = new Client(); client.start(); } } ======== Server.java =========== import java.io.*; import java.net.*; public class Server { int port = 5204; Server(){} private void start() throws Exception{ ServerSocket soc = new ServerSocket(port); System.out.println('Started...'); while ( true) { Socket inSocket = soc.accept(); System.out.println('Accepted:'+inSocket. toString()); InputStream is = inSocket.getInputStream(); OutputStream os = inSocket.getOutputStream(); StringBuffer inData = new StringBuffer(); for(int buff = 0; (buff=is.read()) != -1 ; inData.append((char)buff)) { // вот тут то он и затыкается ^^^^^ // просто глянуть чего он принял System.out.print((char)buff); } System.out.println('Got:'+inData.toStrin g()); os.write(('Server's responce OK').getBytes()); os.flu
0
|
|
| 24.06.2008, 23:24 | |
|
Ответы с готовыми решениями:
1
Дискуссия Дискуссия K/X/ubuntu, Debian Дискуссия про Сетевое Оборудование |
|
0 / 0 / 0
Регистрация: 27.02.2008
Сообщений: 56
|
|
| 25.06.2008, 12:35 | |
|
Не совсем понял, чего ради это сюда выложено. Ситуация-то очевидная: int read() возвращает -1 'if the end of the stream is reached', а в том случае, если нет подходящего байта в потоке, впадает в состояние ожидания. Так что все совершенно законно не работает. Пользовали бы available().
0
|
|
| 25.06.2008, 12:35 | |
|
Помогаю со студенческими работами здесь
2
Небольшая дискуссия. Закрытый код популярных игр Дискуссия по поводу современных технологий в области веб-дизайна и верстки Стало появляться окно "Внимание! Запрашиваемая вами дискуссия не найдена" учебник по сокетам Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|