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

Вниз

Почему данные не уходят через 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
6-1184599713
yaJohn
2007-07-16 19:28
2008.04.13
ISAPI DLL, файл больше 2 Гб


15-1204225524
Kerk
2008-02-28 22:05
2008.04.13
Три процента


6-1185174069
andreil
2007-07-23 11:01
2008.04.13
Плагин для IE на Delphi?


15-1203995117
Светик
2008-02-26 06:05
2008.04.13
Ошибка CRC


2-1206010028
San1
2008-03-20 13:47
2008.04.13
Множества set of





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