Entwickler-Ecke

Internet / Netzwerk - Sockets UDP TimeOut


SAiBOT - So 02.09.07 11:08
Titel: Sockets UDP TimeOut

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
var
  wsa: WSAData;
  s: TSocket;
  server: sockaddr_in;
  cmd: Array[0..1024of Char;
  i, res:Integer;
begin
  cmd := 'Hi, Server';
  if WSAStartup(MakeWord(2,0), wsa) > 0 then
    MessageBox(0'WSAStartup''Error:',0);
  s := Socket(AF_INET, SOCK_DGRAM, 0);
  if s = INVALID_SOCKET then
    MessageBox(0'Socket''Error:',0);
  server.sin_family := AF_INET;
  server.sin_port := htons(5000);
  server.sin_addr.S_addr := inet_addr('192.168.0.10');
  i := SizeOf(server);
  if sendto(s, cmd, SizeOf(cmd), 0, server, i) = SOCKET_ERROR then
    MessageBox(0, PCHAR('SendTo Errorcode: '+IntToStr(WinSock.WSAGetLastError)), 'Error:',0);
  res := recvfrom(s,cmd,255,0,server,i);
  //cmd := copy(cmd, 0, res);
  if res = SOCKET_ERROR then
    MessageBox(0, PCHAR('recvfrom Errorcode: '+IntToStr(WinSock.WSAGetLastError)), 'Error:',0)
  else
    MessageBox(0, cmd, 'Empfangener Text',0);


Hi all,
Ich möchte für obiegen Code einen TimeOut realisieren, nach der function "recvfrom" hängt sich das Programm auf falls kein request kommt!
Hab dran gedacht das ganze in einen Treadh zu packen und dort irgendwie das TimeOut zu ermöglichen aber keine Ahnung ob das der richtiege Ansatz ist!


Narses - So 02.09.07 23:35
Titel: Re: Sockets UDP TimeOut
Moin!

Wieso programmierst du denn die WSA direkt, bist du Masochist? :gruebel: :? :hair:

user profile icon-=LordEvil=- hat folgendes geschrieben:
Ich möchte für obiegen Code einen TimeOut realisieren, nach der function "recvfrom" hängt sich das Programm auf falls kein request kommt!

Das Programm hängt sich nicht auf, sondern wartet - wie du schon vermutet hast - auf Dateneingang! :mahn:

user profile icon-=LordEvil=- hat folgendes geschrieben:
Hab dran gedacht das ganze in einen Treadh zu packen und dort irgendwie das TimeOut zu ermöglichen aber keine Ahnung ob das der richtiege Ansatz ist!

Ja, das ginge auch in einem Thread; Alternative wäre die asynchrone Benachrichtigung per Message (-> WSAAsyncSelect).

Falls du doch keinen Bock haben solltest, das mit der WSA zu Fuss durchzuziehen, dann schau mal hier [http://www.delphi-forum.de/topic_55339.html]. :idea: ;)

cu
Narses


SAiBOT - Mo 03.09.07 20:05
Titel: Re: Sockets UDP TimeOut
user profile iconNarses hat folgendes geschrieben:
Moin!

Wieso programmierst du denn die WSA direkt, bist du Masochist? :gruebel: :? :hair:


Pff Nein! Ich möchte den Code später in AssemblerCode umwandeln und soweit optimieren wies' geht!

user profile iconNarses hat folgendes geschrieben:
Ja, das ginge auch in einem Thread; Alternative wäre die asynchrone Benachrichtigung per Message (-> WSAAsyncSelect).


Genauer?


Narses - Mo 03.09.07 20:21
Titel: Re: Sockets UDP TimeOut
Moin!

user profile icon-=LordEvil=- hat folgendes geschrieben:
user profile iconNarses hat folgendes geschrieben:
Moin!
Wieso programmierst du denn die WSA direkt, bist du Masochist? :gruebel: :? :hair:

Pff Nein! Ich möchte den Code später in AssemblerCode umwandeln und soweit optimieren wies' geht!

:shock: Doch, du bist Masochist... :lol: Was soll das bringen? :gruebel: Die Netzwerkübertragung (selbst in einem Gigabitnetz) ist um Zehnerpotenzen langsamer, als deine CPU. Selbst wenn du in interpretiertem Basic programmieren würdest, wäre das immer noch "viel zu schnell" für das Netz! :mahn: Fazit: vergebliche Mühe. 8)

user profile icon-=LordEvil=- hat folgendes geschrieben:
user profile iconNarses hat folgendes geschrieben:
Ja, das ginge auch in einem Thread; Alternative wäre die asynchrone Benachrichtigung per Message (-> WSAAsyncSelect).

Genauer?

Schau in den Quelltext der Komponente, die ich dir gelinked habe. :idea:

cu
Narses


SAiBOT - Mo 03.09.07 20:49
Titel: Re: Sockets UDP TimeOut
user profile iconNarses hat folgendes geschrieben:
:shock: Doch, du bist Masochist... :lol: Was soll das bringen? :gruebel: Die Netzwerkübertragung (selbst in einem Gigabitnetz) ist um Zehnerpotenzen langsamer, als deine CPU. Selbst wenn du in interpretiertem Basic programmieren würdest, wäre das immer noch "viel zu schnell" für das Netz! :mahn: Fazit: vergebliche Mühe. 8)


Optimieren im Sinne von Dateigröße!


Narses - Mo 03.09.07 23:52

Dann noch viel Erfolg! :zustimm: