Schrift
[thread]12319[/thread]

Chatserver

Leser: 4


<< >> 2 Einträge, 1 Seite
Gast Gast
 2008-08-08 15:35
#113239 #113239
Habe folgenden Code für einen TCP Chatserver gefunden:

Nur wie bekomm ich hin, dass mehrere sich Verbinden können?

Wenn ich mich jetzt verbinde, kommt die nachricht erst wenn client 1 die verbindung schließt :(

Und desweiteren wie kann ich eine Nachricht an alle clienten weitergeben? :(

Code: (dl )
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
26
#!/usr/bin/perl -w
use IO::Socket;
use Net::hostent;

$PORT = 1234;

$server = IO::Socket::INET->new( Proto => 'tcp',LocalPort => $PORT,
Listen => SOMAXCONN,
Reuse => 1);

die "can't setup server" unless $server;

while ($client = $server->accept()) {
$client->autoflush(1);
print $client "Welcome to Server!\n\n";

$hostinfo = gethostbyaddr($client->peeraddr);

while (<$client>) {
next unless /\S/;

# ABFRAGEN HIER REIN (LOGIN etc.)

}
}
close $client;
murphy
 2008-08-08 17:57
#113245 #113245
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Gast+2008-08-08 13:35:54--
[...]
Nur wie bekomm ich hin, dass mehrere sich Verbinden können?


Indem Du mehrmals accept ausfuehrst, und zwar ohne zwischendrin die komplette Kommunikation mit einem Client blockierend abzuwickeln.

Um das zu bewerkstelligen, musst Du entweder synchron multiplexen, zum Beispiel mit CPAN:IO::Select, oder Du musst die Clients in separaten Threads oder Prozessen bedienen.

Quote
Wenn ich mich jetzt verbinde, kommt die nachricht erst wenn client 1 die verbindung schließt :(


Was für eine Nachricht denn? Ohne den Code des Clients kann man nur raten, woran das liegt. Vielleicht musst Du auch im Client noch autoflush anschalten.

Quote
Und desweiteren wie kann ich eine Nachricht an alle clienten weitergeben? :(
[...]


Indem Du sie erst von einem Client einliest und dann an alle anderen Clients weiterschickst. Allerdings wirst Du die Nachricht nicht direkt nach dem Empfang wieder rausschicken können, sondern musst sie wohl erst in einer Warteschlange für jeden Client parken.

Wenn Du allerdings den Chatserver nicht aus purer Neugier, wie man so etwas schreibt, implementieren willst, dann würde ich Dir doch empfehlen, lieber ein Modul für ein existierendes Protokoll zu verwenden -- CPAN:Net::Jabber zum Beispiel.
When C++ is your hammer, every problem looks like your thumb.
<< >> 2 Einträge, 1 Seite



View all threads created 2008-08-08 15:35.