Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.013 c
2-1206023020
andreil
2008-03-20 17:23
2008.04.13
Как получить параметры для уже выполняющейся программы?


2-1205758370
Sergey2
2008-03-17 15:52
2008.04.13
Убрать первоначальную форму.


2-1206029759
wowa1
2008-03-20 19:15
2008.04.13
TImageList.Draw


2-1205754947
Sonia
2008-03-17 14:55
2008.04.13
Графика на TurboPascal


2-1205676755
Res
2008-03-16 17:12
2008.04.13
Cardinal




   Наверх