Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.09.2009, 15:29
Аватар для KINo-nnov
KINo-nnov KINo-nnov вне форума
Прохожий
 
Регистрация: 29.09.2009
Сообщения: 2
Репутация: 10
По умолчанию 4 пакета вместо одного

Добрый день.

Только начинаю работать с сетью в Delphi. Пытаюсь создать простейшую программку для отправки-получения данных. Вроде бы все получается, но... Почему-то у меня клиент отправляет, а сервер соответственно получает 4 пакета вместо 1. Скажите пожалуйста, почему такое может происходить?

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<b>type</b>
...
  TByteArr = <b>array of</b> Byte;
  PByteArr = ^TByteArr;
 
...
<b>procedure</b> Tmain.sendClick(Sender: TObject);
<b>var</b>
        data: TByteArr;
<b>begin</b>
        data:=StringToHex(msg.Text);
        client.Socket.SendBuf(PByteArr(data)^,Length(data));
<b>end;</b>
 
...
 
<b>procedure</b> Tmain.serverClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
<b>var</b>
        i: Integer;
        data: TByteArr;
        s: <b>String</b>;
<b>begin</b>
//        if Socket.ReceiveLength = 0 then
//                Exit;
        s:='';
        SetLength(data,Socket.ReceiveLength);
        <b>for</b> i:=0 <b>to</b> Socket.ReceiveLength-1 <b>do</b>
                <b>begin</b>
                        Socket.ReceiveBuf(data[i],1);
                        s:=s+IntToHex(data[i],2);
                <b>end;</b>
        log.Lines.Add('Server received: '+s);
        Socket.SendBuf(PByteArr(data)^,Length(data));
<b>end;</b>

Поясню: при отправлении клиентом строки 01020A0B на сервер приходит эта последовательность байт, и еще 3 пустых пакета (ReceiveLength = 0), что и отображается в log (TMemo) как три пустых строки. Естественно, сервер те же три пустых строки отправляет назад клиенту (Socket.SendBuf в serverClientRead).
Причем бывает так, что по первому при текущем запуске проекта нажатию кнопки send все отправляется правильно, то есть отправляется только введенная строка байт.
__________________
-=: KINo :=-
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:29.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025