Schrift
[thread]4356[/thread]

UDP - nur bis 4 Zeichen senden?!: ... bei mehr geht Programm nicht?!

Leser: 1


<< >> 5 Einträge, 1 Seite
gummientchen
 2003-08-19 11:55
#38231 #38231
User since
2003-08-14
26 Artikel
BenutzerIn
[default_avatar]
Moin, hab hier ein völlig seltsames Problem... folgender beispielhafter Code:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/local/bin/perl
use constant MYPORT => 10002;
use constant REMOTEPORT => 10001;
use constant REMOTEHOST => '192.168.23.1';
use constant STRING => 'PING';

use Socket;
use IO::Socket;

# create a socket
my &#36sock = new IO::Socket::INET(LocalPort => MYPORT, Proto => 'udp')
    or die "Can't create socket: &#36!";

my (&#36remote,&#36input,&#36c);
&#36remote = sockaddr_in(REMOTEPORT, inet_aton(REMOTEHOST));
my &#36rc = &#36sock->send(STRING,length(STRING),&#36remote);
die "&#36! &#36@" unless &#36rc;
&#36rc = &#36sock->recv(&#36input,32768,0);
die "&#36! &#36@" unless &#36rc;
print "received: &#36input\n";


funktioniert so wie er ist. Sobald ich aber bei STRING ein Zeichen mehr eintrage (Bsp.: "PINGU"), stirbt das Ding entweder mit einem "unknown error" beim send, oder es passiert einfach gar nix, Programm hängt :(

interessanterweise geht recv() auch mit größeren Datenmengen (hab von anderen Programmen Pakete "abgefangen", die bis 56 Byte groß waren), beim send() nur bis 4... ???

Was hab ich verpasst?
Danke!

<edit> Achso, am Netzwerk kanns nicht liegen, das geht. Außerdem tritt das Problem auch auf, wenn ich nur lokal (127.0.0.1) arbeite.</edit>\n\n

<!--EDIT|gummientchen|1061279828-->
-- never trust a man who can count to 1023 on his fingers --
gummientchen
 2003-08-19 12:31
#38232 #38232
User since
2003-08-14
26 Artikel
BenutzerIn
[default_avatar]
Ich muß UDP verwenden, weil ich mich sozusagen als "Man-in-the-middle" in eine bestehende UDP-Kommunikation reinhängen will zum Mitprotokollieren und Analysieren. Sprich die beiden Endpunkte werden auf mich "umgebogen" und ich forwarde die Pakete einfach an den richtigen Empfänger, wobei ich sie mitlogge...
Hat jemand eine Idee?
-- never trust a man who can count to 1023 on his fingers --
ronald
 2003-08-19 13:07
#38233 #38233
User since
2003-08-15
76 Artikel
BenutzerIn
[default_avatar]
Die Parameter der Funktion send stimmen nícht:
Code: (dl )
1
2
3
lxdata1(r41o):/tmp/forslog> perldoc -f send
      send SOCKET,MSG,FLAGS,TO
      send SOCKET,MSG,FLAGS


Ersetz mal "length(STRING)" durch den Flag "0".
Frag mich aber nicht, warum das UDP-Protokoll keine Länge benötigt ;)
ronald
 2003-08-19 12:24
#38234 #38234
User since
2003-08-15
76 Artikel
BenutzerIn
[default_avatar]
Warum verwendest du UDP?
Versuch's mal mit TCP.

IIRC ist der Unterschied zwischen UDP und TCP der, dass man bei UDP die einzelnen Pakete manuell zusammensortieren muss (wobei ich nie verstanden habe, wie das gehen soll. War mir auch egal, weil ich TCP verwende, und bei TCP immer alles korrekt ankommt :) ).
gummientchen
 2003-08-19 13:22
#38235 #38235
User since
2003-08-14
26 Artikel
BenutzerIn
[default_avatar]
*grr* das war's, dankeschön!

*kopfkratz* ich dachte, ich hätte die Doku gelesen gehabt... Das kommt davon, wenn man Code aus dem Netz nimmt und daran glaubt, daß er geht... :)
-- never trust a man who can count to 1023 on his fingers --
<< >> 5 Einträge, 1 Seite



View all threads created 2003-08-19 11:55.