![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Многопользовательский сервер [D7, WinXP]
Ozone © (2004-03-25 12:58:00)Ситуация такая:
8 различных клиентов "одновременно" отправляют каждую секунду картинки (~8 Кб) на сервер.
Как правильно их "одновременно" принять и вывести на экран
(т.е. должно получиться 8 окошечек с меняющимися картинками)
Digitman (2004-03-25 16:17:00) [1]
> ВСЕ ЗАРАБОТАТО
расчудесно)
Ozone (2004-03-25 15:46:00) [2]ВСЕ ЗАРАБОТАТО....
Ozone (2004-03-25 15:43:00) [3]Там нет SendStream...
Ozone (2004-03-25 15:41:00) [4]Пробовал также отсылать и принамать простой массив символов - все работает, а с использованием TMemoryStream - не работает
Клиент
const
Buf : array [1..4] of char = ('1', '2', '3', '4');
begin
try
tcpClient.Connect();
tcpClient.Socket.Send(Buf, 4);
tcpClient.Disconnect;
except end;
end;
Сервер
var
s: string;
m : TMemoryStream;
begin
m := TMemoryStream.Create;
AThread.Connection.ReadStream(m, -1, true);
m.SaveToFile('tmp.txt');
m.Free;
end;
Digitman (2004-03-25 15:38:00) [5]так ведь передающая-то сторона тоже должна передавать вызовом SendStream ! А у тебя что там ? Send() какой-то ...
Ozone (2004-03-25 15:10:00) [6]Пробовал принимать без длины, т.е.
AThread.Connection.ReadStream(_file, -1, true);
Такая же история.
Ozone (2004-03-25 15:08:00) [7]точнее не nil, а просто пустой...
Может я отправляю не правильно?
Ozone (2004-03-25 14:52:00) [8]Сервер (на OnExecute):
var
size: string;
_file : TMemoryStream;
begin
_file := TMemoryStream.Create;
size := AThread.Connection.ReadLn();
AThread.Connection.ReadStream(_file,StrToInt(size), false);
// здесь _file = nil ????
_file.SaveToFile('temp.jpg');
_file.Free;
end;
Digitman (2004-03-25 14:50:00) [9]охх ...
вот ты скажи на милость, вникал ли ты в тип и смысл первого параметра метода ReadBuffer() ?
Ozone (2004-03-25 14:39:00) [10]Сервер (на OnExecute):
var
size: string;
_file : TMemoryStream;
begin
_file := TMemoryStream.Create;
size := AThread.Connection.ReadLn(); // надо было так
AThread.Connection.ReadBuffer(_file,StrToInt(size)); //теперь на этой строке "повисает"
_file.Free;
end;
Ozone (2004-03-25 14:13:00) [11]Вот накидал кое-что, но не работает
Клиент:
var
_file: TMemoryStream;
begin
inc(ImgIndx);
_file := TMemoryStream.Create;
_file.LoadFromFile('...');
try
tcpClient.Connect();
tcpClient.WriteLn(IntToStr(_file.Size));
tcpClient.Socket.Send(_file, _file.Size);
except end;
_file.Free;
end;
Сервер (на OnExecute):
var
size: string;
_file : TMemoryStream;
begin
_file := TMemoryStream.Create;
AThread.Connection.ReadLn(size);
// вот здесь size оказывается пустым ...
AThread.Connection.ReadBuffer(_file,StrToInt(size));
_file.Free;
end;
Ozone (2004-03-25 13:48:00) [12]Пасиба, буду пробовать
Digitman (2004-03-25 13:43:00) [13]
> Indy сама позаботиться о "параллельном" приеме.
> Это верно?
в целом да, верно
> на сервере я же не знаю какого размера придет картинка
конечно не знаешь ... ты же не предусмотрел передачу такой инф-ции клиентом серверу ПЕРЕД тем как передавать собственно "картинку"
предусмотри это - и вопрос сам по себе рассосется
иными словами, прежде чем писать подобного рода распределенные сетевые приложения, продумай и разработай протокол информационного обмена, в деталях расписав его где-то (хоть на бумаге, хоть сделав тату) и имея всегда перед глазами
Ozone (2004-03-25 13:35:00) [14]Я так понимаю, что в зависимости от клиента (IP), я просто помещаю картинку в нужное место, а Indy сама позаботиться о "параллельном" приеме.
Это верно?
Ozone (2004-03-25 13:32:00) [15]И еще вопрос: на сервере я же не знаю какого размера придет картинка, но ведь указывать размер надо.
Т.е. пишу
var
memStream: TMemoryStream;
begin
memStream := TMemoryStream.Create;
AThread.Connection.ReadBuffer(memStream, ???);
memStream.Free;
Verg (2004-03-25 13:32:00) [16]Правильный прием по сети - это одно
Првильный вывод на "экран" - это друге.
С чем именно проблемы?
Ozone (2004-03-25 13:28:00) [17]Пока не пробовал....
А такое ведь возможно?
Digitman (2004-03-25 13:26:00) [18]
> Как правильно
что у тебя не получается ?