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

Вниз

Помогите разобраться с приемом UDP пакетов   Найти похожие ветки 

 
begginer   (2006-07-11 18:58) [0]

Уважаемые Мастера! Пытаюсь написать клиент к чату, не могу никак получить пакеты , которые приходят на заданный порт UDP... Пытаюсь так:


 WSAStartup(MakeWord(1, 0), tmp);

 my_sock:=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
 addr.sin_family:= AF_INET;
 addr.sin_addr.S_addr:= htonl(INADDR_ANY);
 addr.sin_port:= htons(8169);
 if bind(my_sock, addr, SizeOf(addr)) <> 0 then
   setsockopt(my_sock, SOL_SOCKET, SO_REUSEADDR, optval, optlen);

 bind(my_sock, addr, SizeOf(addr));
   
 reciev(my_sock);
...........

 procedure reciev(my_sock: TSocket);
var
 buf: PChar;
 bufsize: DWORD;
 from: sockaddr_in;
 fromlen: integer;
begin
 bufsize:= 65000;
 GetMem(buf, bufsize);
 fromlen:= SizeOf(TSockAddr);
// while true do закомментировал, т.к. неуверен нужен ли здесь цикл
// begin
 if recvfrom(my_sock, buf^, bufsize, 0, from, fromlen) = SOCKET_ERROR then
 begin
   // тут ошибка 10035
 end
 else
 ... // тут планировал обработку данных
// end;
end;



В общем кто знает, помогите пожалуйста... постоянно вылетает на ошибку 10035 (как я понял просто нет данных, т.е. пакет не пришел... но даже когда пакет приходит ошибка остается).


 
Slym ©   (2006-07-12 07:50) [1]

10035 Операция на незаблокированном сокете не может быть завершена немедленно.
var Blocking:integer;
Blocking:=0;
ioctlsocket(my_sock, FIONBIO, Blocking);
reciev(my_sock);


 
begginer   (2006-07-13 07:21) [2]

Все осталось также :( есть другие предположения? кстати ioctlsocket вызывает ошибку 10022, т.е. неправильный аргумент :( с значение Blocking > 0 все нормально, может udp сокеты не поддерживают или не нуждаются в блокировке?


 
Slym ©   (2006-07-13 08:14) [3]

Проверено, работает:
program UDP;

{$APPTYPE CONSOLE}

uses
 SysUtils,WinSock,Windows,RTLConsts;

procedure RaiseSocketError(const Op: string);
var Error:integer;
begin
 Error := WSAGetLastError;
 raise Exception.CreateResFmt(@sWindowsSocketError, [SysErrorMessage(Error), Error, Op]);
end;

procedure RecvLoop(sock: TSocket);
const BufSize:integer=$ffff;
var
 buf: PChar;
 from: TSockAddr;
 Size,fromlen: integer;
 s:string;
begin
 GetMem(buf, bufsize);
 try
   while true do
   begin
     Size:=BufSize;
     fromlen:= SizeOf(TSockAddr);
     Size:=recvfrom(sock, buf^, Size, 0, from, fromlen);
     if Size<> SOCKET_ERROR then
     begin
       SetString(s,buf,Size);
       Writeln(s);
     end else RaiseSocketError("recvfrom");
   end;
 finally
   FreeMem(buf);
 end;
end;

var
 WSAData: TWSAData;
 sock:TSocket;
 addr:TSockAddrIn;
begin
 WSAStartup(MakeWord(1, 0), WSAData);
 sock:=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
 addr.sin_family:= AF_INET;
 addr.sin_addr.S_addr:= htonl(INADDR_ANY);
 addr.sin_port:= htons(3052);
 bind(sock, addr, SizeOf(addr));
 RecvLoop(sock);
 closesocket(sock);
 WSACleanup;
end.



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

Форум: "Сети";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.042 c
1-1161594663
dmitry kholl
2006-10-23 13:11
2006.12.03
Рост памяти с TWebBrowser


15-1163149860
Jolik
2006-11-10 12:11
2006.12.03
Стоит ли переходить на Delphi 2005?


3-1159713284
bugorik
2006-10-01 18:34
2006.12.03
Не вводятся русские данные в Interbase таблицу.


2-1163197263
superlamer
2006-11-11 01:21
2006.12.03
Как правильно удалить объект созданный в рантайме


15-1163498467
DelphiN!
2006-11-14 13:01
2006.12.03
Перенос Delphi6 на другой компьютер





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