Форум: "Сети";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
ВнизМногопользовательский сервер Найти похожие ветки
← →
Ozone © (2004-03-25 12:58) [0]Ситуация такая:
8 различных клиентов "одновременно" отправляют каждую секунду картинки (~8 Кб) на сервер.
Как правильно их "одновременно" принять и вывести на экран
(т.е. должно получиться 8 окошечек с меняющимися картинками)
← →
Digitman © (2004-03-25 13:26) [1]
> Как правильно
что у тебя не получается ?
← →
Ozone © (2004-03-25 13:28) [2]Пока не пробовал....
А такое ведь возможно?
← →
Verg © (2004-03-25 13:32) [3]Правильный прием по сети - это одно
Првильный вывод на "экран" - это друге.
С чем именно проблемы?
← →
Ozone © (2004-03-25 13:32) [4]И еще вопрос: на сервере я же не знаю какого размера придет картинка, но ведь указывать размер надо.
Т.е. пишу
var
memStream: TMemoryStream;
begin
memStream := TMemoryStream.Create;
AThread.Connection.ReadBuffer(memStream, ???);
memStream.Free;
← →
Ozone © (2004-03-25 13:35) [5]Я так понимаю, что в зависимости от клиента (IP), я просто помещаю картинку в нужное место, а Indy сама позаботиться о "параллельном" приеме.
Это верно?
← →
Digitman © (2004-03-25 13:43) [6]
> Indy сама позаботиться о "параллельном" приеме.
> Это верно?
в целом да, верно
> на сервере я же не знаю какого размера придет картинка
конечно не знаешь ... ты же не предусмотрел передачу такой инф-ции клиентом серверу ПЕРЕД тем как передавать собственно "картинку"
предусмотри это - и вопрос сам по себе рассосется
иными словами, прежде чем писать подобного рода распределенные сетевые приложения, продумай и разработай протокол информационного обмена, в деталях расписав его где-то (хоть на бумаге, хоть сделав тату) и имея всегда перед глазами
← →
Ozone © (2004-03-25 13:48) [7]Пасиба, буду пробовать
← →
Ozone © (2004-03-25 14:13) [8]Вот накидал кое-что, но не работает
Клиент:
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 14:39) [9]Сервер (на OnExecute):
var
size: string;
_file : TMemoryStream;
begin
_file := TMemoryStream.Create;
size := AThread.Connection.ReadLn(); // надо было так
AThread.Connection.ReadBuffer(_file,StrToInt(size)); //теперь на этой строке "повисает"
_file.Free;
end;
← →
Digitman © (2004-03-25 14:50) [10]охх ...
вот ты скажи на милость, вникал ли ты в тип и смысл первого параметра метода ReadBuffer() ?
← →
Ozone © (2004-03-25 14:52) [11]Сервер (на 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;
← →
Ozone © (2004-03-25 15:08) [12]точнее не nil, а просто пустой...
Может я отправляю не правильно?
← →
Ozone © (2004-03-25 15:10) [13]Пробовал принимать без длины, т.е.
AThread.Connection.ReadStream(_file, -1, true);
Такая же история.
← →
Digitman © (2004-03-25 15:38) [14]так ведь передающая-то сторона тоже должна передавать вызовом SendStream ! А у тебя что там ? Send() какой-то ...
← →
Ozone © (2004-03-25 15:41) [15]Пробовал также отсылать и принамать простой массив символов - все работает, а с использованием 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;
← →
Ozone © (2004-03-25 15:43) [16]Там нет SendStream...
← →
Ozone © (2004-03-25 15:46) [17]ВСЕ ЗАРАБОТАТО....
← →
Digitman © (2004-03-25 16:17) [18]
> ВСЕ ЗАРАБОТАТО
расчудесно)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.047 c