Текущий архив: 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.48 MB
Время: 0.006 c