Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Вниз

tserversocket and tclientsocket   Найти похожие ветки 

 
P.D.YU   (2004-05-13 10:14) [0]

почему при быстрой отправке сообщений строки начинают склеиваться?
вот кусок кода
у сервера
....
procedure TForm1.ServerSocket1Accept(Sender: TObject;
 Socket: TCustomWinSocket);
begin
listbox1.clear;
 for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
  ServerSocket1.Socket.Connections[i].SendText("#N");
end;
....
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
var s: string;
    i: Integer;
begin
s:=socket.receivetext;
 if Copy(s,1,2) = "#N" then begin
  Delete(s,1,2);
  ListBox1.Items.Add(s);
  s := "#U";
  for i := 0 to ListBox1.Items.Count-1 do
   s := s+ListBox1.Items[i]+";";
  for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
   ServerSocket1.Socket.Connections[i].SendText(s);
  Exit;
 end;
end;
...
у клиента
...
procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
var s,from_,to_: string;
begin
  s := Socket.ReceiveText;
 if Copy(s,1,2) = "#U" then begin
  Delete(s,1,2);
  ListBox1.Items.Clear;
  while Pos(";",s) > 0 do begin
   ListBox1.Items.Add(Copy(s,1,Pos(";",s)-1));
   Delete(s,1,Pos(";",s));
  end;
  Exit;
 end;
end;
...
все работает нрмально на 2-3 компах но когда запустишь на 5-6 то клиент начинает получать строки типа "#UDenis;andrey,pc5,pc6,pc7;#UDenis;andrey,pc5,pc6,pc7;"
похоже они просто склеиваются
может посоветуете что?


 
Verg ©   (2004-05-13 10:36) [1]


> может посоветуете что?


Учесть этот факт.
TCP/IP рассматривает передаваемые/принимаемые данные как неструктуированный поток байтов. Ему глубоко плевать, по большому счету, порциями какого размера ты пополняешь этот поток на передающей стороне. Так же ему все равно какими кусками ты будешь извлекать данные из принятого потока на приемной стороне.
ReceiveText - просто принимает столько байтов, сколько их оказалось в приемном буфере сокета на момент вызова этой ф-ции. Т.е. все, успевшие "добраться" на текущий момент времени.


 
P.D.YU   (2004-05-13 10:58) [2]

а если использвать инди компоненты вожможено ли такое же?


 
Verg ©   (2004-05-13 11:09) [3]


> [2] P.D.YU   (13.05.04 10:58)
> а если использвать инди компоненты вожможено ли такое же?


Инди отчасти сделает эту работу за тебя, т.к. в Ф-ции ReceiveLn можно определить свой разделитель строк (в данном случае ";"). Оно само будет грамотно накапливть принимаемую из гнезда информацию, отслеживая появление этого разделителя и т.д.
Но режим сокетов - блокирующий, со всеми вытекающими.


 
P.D.YU   (2004-05-13 11:52) [4]

а что за фрукт tcpserver и tcpclient в d7?
есть ли у tcpserver а аналого свойства connections в serversocket?


 
Verg ©   (2004-05-13 12:34) [5]


> P.D.YU   (13.05.04 11:52)


Я конечно извиняюсь, но ты не можешь посмотреть Help? У тебя кто-то скрал исходники VCL, в частности sockets.pas?


 
P.D.YU   (2004-05-14 10:01) [6]

искал искал так ничего и не надыбал вы просто скажите как разослать сообщение всем подключенным клиентам?



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.043 c
3-1086877190
С.М.
2004-06-10 18:19
2004.07.11
Как сделать термометр для отображения процесса чтения blob поля?


4-1085737780
Cronos
2004-05-28 13:49
2004.07.11
Как заблокировать клавишу Windows? Подскажите, пожалуйста.


1-1088514418
homer
2004-06-29 17:06
2004.07.11
Delphi 5 не понимает свои коды!


14-1088091866
FX
2004-06-24 19:44
2004.07.11
Preview


3-1087060257
Дэвид
2004-06-12 21:10
2004.07.11
DBLookupComboBox1





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский