![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
склейка пакетов в сокете [D6, WinXP]
malyar © (2007-04-05 23:20:00)всем привет
народ внесите ясность в работу сокетов
имеется serversocket работающий в nonblock режиме
все данные которые он получает от разных клиентов
заносятся в одну глобальную переменную (buf:string)
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var s:string;
begin
s:=socket.ReceiveText;
if s = '' then exit;
buf:=buf+s;
end;
----------------------------------------------
предположим клиент1 передает на сервер "111111111111111"
предположим клиент2 передает на сервер "222222222222222"
возможна ли ситуация когда в переменоой buf данные перемешаются
что типа "11112211222221111112222" ?
или всегда будут "111111111111111222222222222222" ?
тобиш возможно-ли возникновение события ServerSocket1ClientRead
пока клиент не передал все данные посланные командой sendtext ?
Сергей М. (2007-04-06 09:16:00) [1]
> предположим клиент1 передает на сервер "111111111111111"
> предположим клиент2 передает на сервер "222222222222222"
>
> возможна ли ситуация когда в переменоой buf данные перемешаются
> что типа "11112211222221111112222" ?
Да, возможна - буфер-то у тебя один на всех клиентов !
А должен быть индивидуальный буфер для каждого клиента.
medved_68 (2007-04-06 09:03:00) [2]
> возможна ли ситуация когда в переменоой buf данные перемешаются
>
> что типа "11112211222221111112222" ?
Нет, если только сам перемешаешь при передаче. :)
> или всегда будут "111111111111111222222222222222" ?
Да. В каком порядке послал, в таком и получишь, а вот в одном пакете или в нескольких - зависит от количества передаваемого.
SlymRO (2007-04-06 07:00:00) [3]malyar (05.04.07 23:20)
11112211222221111112222
именно так
один Send может вызвать множество Read и наоборот
множество Send может вызвать один Read