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


Автор: DsKTY 25.10.2008, 17:42
Нужно передавать данные (wav-файл) от сервера клиенту. 

Сервер:
Код

FileInputStream fis = new FileInputStream("C:/3.wav");
            
ServerSocket ss = new ServerSocket(8034);
Socket s = ss.accept();

OutputStream os = s.getOutputStream();

int x = fis.read();            
while(x != -1){
    os.write(x);
    x = fis.read();
}


Клиент:
Код

Socket socket = new Socket(host, port);
InputStream stream = socket.getInputStream();

byte[] buff = new byte[2000];
stream.read(buff);



Сразу же при создании сокета на клиенте (первая строка), сервер начинает слать в него данные, и выполнение программы клиента не продолжается до тех пор пока сервер не закончит передачу данных. Только после этого на клиенте выполняется получение потока, создание байтового массива и чтение чтение данных в массив из потока. Ожидалось, что клиент будет "вычитывать" данные из сервера, когда это будет ему (клиенту) нужно, но что-то не выходит. Чувствую, что где-то чего-то не понимаю, но не могу понять где и чего именно... 

Спасибо.

Автор: LSD 27.10.2008, 10:41
Цитата(DsKTY @  25.10.2008,  18:42 Найти цитируемый пост)
Ожидалось, что клиент будет "вычитывать" данные из сервера, когда это будет ему (клиенту) нужно, но что-то не выходит. 

Что значит когда ему будет нужно? Если вам данные сейчас не нужны, не соединяйтесь с сервером. Зачем нужно соединяться сейчас, а читать потом?
Клиент будет читать данные по мере их поступления. Просто у тебя сервер шлёт данные по одному байту. Скорее всего ОС просто собирает данные в буфер (чтобы не гнать порожний трафик) и потом уже отправляет блоками. Если файл маленький, то скорее всего он одним пакетом и пойдет.

P.S. Чтение данных и сокета у тебя неправильно сделано.

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