Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.13;
Скачать: CL | DM;

Вниз

Почему данные не уходят через WinSock.Send?   Найти похожие ветки 

 
@!!ex ©   (2008-02-26 18:35) [0]

Раз в 50мс вызывается примерно такой код:

for Index:=0 to Count-1 do
 WinSock.Send(FSocket,Objects[Index],sizeof(Objects[Index]),0);


Проблема в том, что лог полученных данных(для Count=4) выглядит примерно так:
Object 1
Object 1
Object 1
Object 1
Object 1
Object 1
Object 1
Object 2
Object 1
Object 1
Object 1
Object 1
Object 2
Object 1
Object 1
Object 1
Object 1
Object 3
Object 1
Object 1
Object 1
Object 1
Object 2

Почему первый объект отсылается всегда, а остальные нет???


 
@!!ex ©   (2008-02-26 18:35) [1]

P.S.
Размер объектов колеблится примерно от 300кб до 450.


 
@!!ex ©   (2008-02-26 18:36) [2]

байт. не килобайт. просто байт. 300-450байт


 
DiamondShark ©   (2008-02-26 18:43) [3]

как согласуются


> sizeof(Objects[Index])


и


> Размер объектов колеблится


?

Даже не видя декларации Objects можно сказать, что это бред.


 
@!!ex ©   (2008-02-26 18:53) [4]

> [3] DiamondShark ©   (26.02.08 18:43)

Да какая разница? Это код ПРИМЕРНЫЙ. В реале там все сложнее и выглдяит, но смысл мне его приводить? Это как то повлияет на оценку происходящего? Врядли, ибо данные на отсылку приходят корректные, но не всегда отсылаются, О чем я и написал.

P.S.
Кстати. подключение по TCP/IP


 
VirEx ©   (2008-02-26 18:58) [5]

UDP? :)


 
@!!ex ©   (2008-02-26 19:15) [6]

> [5] VirEx ©   (26.02.08 18:58)

А чем UDP поможет?


 
VirEx ©   (2008-02-26 19:18) [7]

нет, я просто спросил.

возможно пакеты теряются: размер большой, а время маловатор.
попробуй увеличить интервал и посмотреть, не теряются ли


 
@!!ex ©   (2008-02-26 19:20) [8]

> [7] VirEx ©   (26.02.08 19:18)

Так TCP/IP у него ж вродже гарантированная доставка... Никаких ошибок не появляется...


 
VirEx ©   (2008-02-26 19:27) [9]

ну тогда курить хелп Send и функции установки опций сокета...


 
VirEx ©   (2008-02-26 19:29) [10]

о, уже в хелпе чтото нашел:

int send (

   SOCKET s,
   const char FAR * buf,
   int len,
   int flags
  );

flags

Value Meaning
MSG_DONTROUTE Specifies that the data should not be subject to routing. A Windows Sockets service provider can choose to ignore this flag.
MSG_OOB Send out-of-band data (stream-style socket such as SOCK_STREAM only. Also see Out-Of-Band data for a discussion of this topic).

With SO_OOBINLINE enabled, the urgent data remains in the data stream. As a result, the OOB data block is never lost when a new TCP segment arrives containing urgent data. The existing OOB data "mark" is updated to the new position.


 
Kerk ©   (2008-02-26 19:30) [11]

Покажи как получаешь


 
VirEx ©   (2008-02-26 19:32) [12]

угу, заодно залогинь результаты WSAGetLastError


 
@!!ex ©   (2008-02-26 19:35) [13]

procedure TAbstractClientSocket.WMREAD;
var
 RecLen,ReadLen:Integer;
 Buffer:String;
begin
 ioctlsocket(FSocket,FIONREAD,LongInt(Reclen));
 if RecLen>0 then begin
   SetLength(Buffer,Reclen);
   ReadLen:=Recv(FSocket,Buffer[1],RecLen,0);
   while ReadLen<RecLen do
     ReadLen:=ReadLen+Recv(FSocket,Buffer[ReadLen+1],RecLen-ReadLen,0);
   FData:=FData+Buffer;
   OnData(FData);
 end;
end;


 
@!!ex ©   (2008-02-26 19:36) [14]

Это не мой код, на низком уровне я не умею работать с сетью...
Читай первый сетевой проект..


 
Slym ©   (2008-02-27 05:09) [15]

мда... Для начала выясним:
1. Режим клиента (блок/неблок)
2. Сервер самописный? Если да то его режим (блок/неблок)
подсказка - WinSock.Send это функция с результатом, а не процедура


 
@!!ex ©   (2008-02-27 07:53) [16]

> [15] Slym ©   (27.02.08 05:09)

Что подразумевается под блок/неблок?
И сервер и клиент - работают в асинхронном режиме.


 
Slym ©   (2008-02-27 10:06) [17]

@!!ex ©   (27.02.08 7:53) [16]
в асинхронном режиме

онже неблокирующий (извиняюсь за терминологию)
Остается все таже подсказка... Смотреть результат функции, и скорее всего там ты увидишь ноль и WSAGetLastError=WSAEWOULDBLOCK что значает "буфер отправки полон, подождите" :)


 
Slym ©   (2008-02-27 10:08) [18]

Slym ©   (27.02.08 10:06) [17]
всего там ты увидишь ноль

извиняюсь... -1! SOCKET_ERROR



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

Текущий архив: 2008.04.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.02 c
6-1185185689
vr-online
2007-07-23 14:14
2008.04.13
Сеть и DirectX


2-1205597380
Riply
2008-03-15 19:09
2008.04.13
Упреждающее чтение.


15-1203874860
Dmitry S
2008-02-24 20:41
2008.04.13
Через 13 часов вылет в столицу...


2-1205757729
Pavelkq
2008-03-17 15:42
2008.04.13
Не переходит курсор в позицию в RichEdit


15-1204040112
@!!ex
2008-02-26 18:35
2008.04.13
Почему данные не уходят через WinSock.Send?