Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 18.08.2007
Сообщений: 289

Дискуссия по сокетам в Java

24.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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.06.2008, 23:24
Ответы с готовыми решениями:

Дискуссия
Вам даётся утверждение. Его надо отвергнуть или доказать. Пример: "......" Слоны летают ",,,,,," Нет. Летают птицы Просто...

Дискуссия K/X/ubuntu, Debian
Я за OS Linux провёл довольно мало времени, а именно я работал с Ubuntu. Но вот наконец прищёл тот момент когда я решил поставить Linux для...

Дискуссия про Сетевое Оборудование
В данном треде только "Сетевое оборудование" и Средства коммуникации. И так давайте поговорим про сетевое оборудование не в общем формате. ...

1
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.06.2008, 12:35
Помогаю со студенческими работами здесь

Дискуссия по поводу внутреннего устройства this в c#
this ссылается именно на экземпляр класса? или еще экземпляр значимого типа? я знаю что при вызове метода передается неявный параметр...

Небольшая дискуссия. Закрытый код популярных игр
Занимаюсь созданием браузерных игр, и вот стал интересен вот такой вопрос: Возьму в качестве примера игру world of warcraft, т.к....

Дискуссия по поводу современных технологий в области веб-дизайна и верстки
Здравствуйте! У меня в процессе создания сайта на завершающей стадии возникли некоторые вопросы, или сомнения, как угодно. Я в этом деле...

Стало появляться окно "Внимание! Запрашиваемая вами дискуссия не найдена"
При открытии страницы (в частности "http://ok.ru/" стало появляться неизвестное окно (см.приложение).

учебник по сокетам
Подскажите какую-нибудь книжку/учебник по сокетам в windows. Желательно чтобы простым и понятным языком написана была. Заранее спасибо. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
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 с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru