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

Вниз

Помогите разобраться с приемом 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;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.028 c
15-1163147795
zdm
2006-11-10 11:36
2006.12.03
Защита


15-1163507336
alles
2006-11-14 15:28
2006.12.03
ActiveX в browser


2-1163044004
TMemoUser
2006-11-09 06:46
2006.12.03
Можно ли в TMemo сделать подчёркивание волнистой линиией как в Во


2-1163184821
_Ламер_
2006-11-10 21:53
2006.12.03
null или нуль?


15-1163711693
antonn
2006-11-17 00:14
2006.12.03
настройки BDS 2006





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