Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.037 c
1-1083688226
KillOfCats
2004-05-04 20:30
2004.05.16
FastReports


6-1079968492
AlexDeQuick
2004-03-22 18:14
2004.05.16
ip-адрес


4-1080823908
Midaw
2004-04-01 16:51
2004.05.16
Перевод хэндла процесса в хэндл его окна


1-1083688521
Влад Сташневский
2004-05-04 20:35
2004.05.16
Узнать адрес в программе вызова процедуры


3-1082441334
Соловьев
2004-04-20 10:08
2004.05.16
Падает сервак ФБ 1.03





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский