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

Вниз

Почему идёт сразу два покета ?   Найти похожие ветки 

 
VID   (2002-08-05 15:39) [0]

Сервер - TServerSocket, Клиент - TclientSocket
Ситуация такая:

Клиент подключается к серверу. всё нормально. Сервер, ловит событие onClientConnect и :

procedure Server.OnClientConnect (...Socket:TCusto...);
begin

Socket.SendText ("TEXT_1");
Socket.SendText("TEXT_2");

end;

Клиента в свою очередь ловит событие
onRead и :
Procedure ClientOnREAD(...);
Var S:String;
begin
S:=Client.ReceiveText;
Memo1.Lines.Add("");
Memo1.Lines.Add(S);
end;

Как видите, в данной ситуации после подключения клиента к серверу, memo1 программы-клиента (речь идёт о двух программах - клиенте и сервере), должен содержать след строки:
-------------------------

TEXT_1

TEXT_2
-------------------------
(рис 1)

НО проблема в том, что при первом коннекте клиента к серверу, либо когда коннект происходит после того как сервер отключил клиента, memo1 программы-клиента выглядит так:
-------------------------

TEXT_1TEXT_2
-------------------------
(рис 2)

В дальнейшем, если отключение клиента было инициировано со стороны клиента, то при его последующем коннекте к серверу всё ок, - рис 2.

Если же, клиент был отключён сервером, то проблема - рис 1.

Думаю, изложенная мною проблема, ясна. Очень надеюсь на Вашу помощь.


 
Digitman   (2002-08-05 15:45) [1]

>>должен содержать след строки:
-------------------------

TEXT_1

TEXT_2
-------------------------

Почему - "должен" ? Где это написано ?


 
VID   (2002-08-05 15:47) [2]

а почему нет ??? Судя по приведённому коду - должен.


 
Digitman   (2002-08-05 15:51) [3]

А каковы аргументы твои ? За исключением того, что визуально это выглядит как вызов двух отдельных send-методов ? Чем руководствуешься кроме ассоциативных предположений ?


 
DiamondShark   (2002-08-05 15:59) [4]


> а почему нет ??? Судя по приведённому коду - должен.


Судя по приведенному коду -- не должен

WinSock имеет полное право объединять несколько посылок в одну.


 
Digitman   (2002-08-05 16:23) [5]

>DiamondShark

Уточню : не Winsock (это - всего лишь API-надстройка), а TCP-гнездо в режиме SOCK_STREAM


 
VID   (2002-08-05 16:44) [6]

ОК :) А может ли сокет клиента, в подобной ситуации:

Client.socker.SendText ("TEXT_1");
Client.socker.SendText ("TEXT_2");

послать такой же сдвоенный пакет ?

по всей видимости, да ... так ?


 
Digitman   (2002-08-05 17:20) [7]

да, именно так.


 
cyborg   (2002-08-05 21:43) [8]

VID вроде ты давно на этом форуме, эту тему уже как минимум четыре раза обсуждали. Хотя возможно ты этим не интересовался.


 
Malder   (2002-08-06 13:27) [9]

Уточню : не Winsock (это - всего лишь API-надстройка), а TCP-гнездо в режиме SOCK_STREAM

А в каком режиме он не будет объединять пакеты никогда ?


 
Digitman   (2002-08-06 13:33) [10]

>Malder

режим SOCK_DGRAM (см. протокол UDP)


 
Malder   (2002-08-06 18:09) [11]

А при чем здесь TCP ?


 
Digitman   (2002-08-06 18:34) [12]

Имелось ввиду : UDP как один из транспортных протоколов в стеке протоколов TCP/IP (Transmision Control Protocol/Internet Protocol)

см., например, http://athena.vvsu.ru/net/book/intro.html

цитата :

Протокол UDP рассматривает ... данные как целостное сообщение; он никогда не разбивает сообщение для передачи в нескольких пакетах и не объединяет несколько сообщений для пересылки в одном пакете. Если прикладной процесс N раз вызвал модуль UDP для отправки данных (т.е. запросил отправку N сообщений), то модулем UDP будет сформировано и отправлено N пакетов, и процесс-получатель будет должен N раз вызвать свой модуль UDP для получения всех сообщений.


 
Digitman   (2002-08-06 18:43) [13]

А TCP-гнездо (столь смутившее тебя из-за аббревиатуры "TCP") - объект, предоставляющий удобный интерфейс для использования в контексте прикладной сетевой задачи стека протоколов TCP/IP с возможностью опционального выбора того или иного транспортного уровня (читай - транспортный режим, например, SOCK_STREAM, SOCK_DGRAM, SOCK_RAW и т.д.)


 
Malder   (2002-08-06 19:32) [14]

WinSock имеет полное право объединять несколько посылок в одну.

Digitman © (05.08.02 16:23)
>DiamondShark

Уточню : не Winsock (это - всего лишь API-надстройка), а TCP-гнездо в режиме SOCK_STREAM


Тогда уж не TCP-гнездо в режиме SOCK_STREAM, а протокол TCP. А его реализация в конкретной ОС не имеет значения.



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

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

Наверх





Память: 0.47 MB
Время: 0.008 c
1-20949
silenser
2002-09-26 07:01
2002.10.07
Word ???


4-21310
cherepovets
2002-08-12 12:23
2002.10.07
Выключение компа


14-21194
Same_Genetik
2002-09-10 21:49
2002.10.07
Что случилось с форумом WinFAQ.ru ?


4-21298
LevVL
2002-08-19 11:28
2002.10.07
Здравствуйте, уважаемые коллеги! Вопрс не совсем простой...


4-21343
RealDummy
2002-08-22 02:51
2002.10.07
Как ставить хук на минимизацию чужого окна?





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