Schrift
[thread]4283[/thread]

Probleme mit Sockets



<< >> 6 Einträge, 1 Seite
esskar
 2004-01-10 02:31
#38324 #38324
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
problem bei sockets: wenn man von ihnen lesen will, sie aber nix enthalten, dann hängen sie.
schau dir das socket select an (das mit 4 parametern); damit bekommst du heraus, wann du vom socket lesen kannst; und lies dann nicht zeilenweise, sondern alles und splitte dann in zeilen auf
Strat
 2004-01-11 12:14
#38325 #38325
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
oft sind auch die zeilenumbrueche ein problem... da gibt es im Modul Socket (oder IO::Socket) auch eine Konstante namens CRLF (oder so aehnlich), die man dafuer benuetzen sollte
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
eisbeer
 2004-01-11 16:48
#38326 #38326
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
gut :)
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
Gast Gast
 2004-01-09 22:31
#38327 #38327
Ich hab einmal Problem mit Sockets. Ich verschicke in einer kombinierten Client/Server Anwendung mehrzeilige Nachrichten.

Nun lese ich die Nachrichten von Sockets zeilenweise ein.
folgenderweise:

Code: (dl )
1
2
3
4
5
while (defined(my $handshake = <$newSocket>))
{
print "inside loop\n";
}
print "outside loop\n";


Das Problem ist das die print-Anweisung nach der while-Schleife nicht ausgegeben wird. Aber auch die print-Anweisung wird nur sooft ausgeführt, wie die Nachricht Zeilen hat.
Ich hab jetzt also keine Ahnung wo mein Programm hängt. Falls es in der WhileSchleife wäre, würde ja die PrintAnweisung immer wiederholt werden. Falls nicht, die print-Anweisung danach. Beendet wird es auch nicht.

Irgendwelche Ideen?
Dubu
 2004-01-10 18:08
#38328 #38328
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ganz simpel ausgedrueckt: Woher soll der Empfaenger wissen, ob der Sender noch eine Zeile schicken wird oder nicht (solange der Socket noch offen ist)?

Es gibt drei Moeglichkeiten: Den Socket schliessen (nicht immer erwuenscht), den Sender eine spezielle Ende-Kennung ("Over Message") schicken lassen (unsicher) oder einen Timeout benutzen (sicher). Wenn nicht innerhalb der Timeout-Zeit weitere Daten gesendet werden, hat der Sender wohl nichts mehr zu sagen oder kann nicht mehr senden. Dafuer ist dann das select() da, wie es esskar schon erwaehnte.
[E|B]
 2004-01-11 13:54
#38329 #38329
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
CRLF = Cariage Return Line Feed
AFAIK
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
<< >> 6 Einträge, 1 Seite



View all threads created 2004-01-10 02:31.