Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4308[/thread]

Sockets: Zwei Clients verbinden (Seite 3)

Leser: 1


<< |< 1 2 3 4 5 >| >> 42 Einträge, 5 Seiten
esskar
 2005-04-19 18:28
#37778 #37778
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Crian,19.04.2005, 11:58]Aber vielleicht hilft der Knoblauch doch besser ;-)[/quote]
ist vorallem einfacher! :)
snarf
 2005-05-12 12:49
#37779 #37779
User since
2003-08-14
77 Artikel
BenutzerIn
[default_avatar]
[quote=Froschpopo,12.05.2005, 01:35]Wenn dann die Datenbankabfrage im Kind beendet ist, sendet dann das Kind die Suchergebnisse an den Client. So stell ich mir das vor.[/quote]
Vorweg: Scheinbar hat Deine Frage ja einen ganz anderen Kontext gehabt als hier dargestellt - und erst danach rückst Du dann mit weiteren Information heraus. Wie kannst Du dann erwarten, dass man Dir vernünftig hilft?

Jetzt mal wieder zum Thread zurück:

... dann mach's doch einfach so ...

By the way: Vielleicht solltest Du langesam aber sicher mal eine genauere Beschreibung Deines Systems liefern. Am Anfang dieses Threads war nur die Möglichkeit nach einem Austausch der Clients untereinander über den Server gefragt, jetzt soll der Server selbst auch noch Daten aus einer DB liefern ...

Das sind (nicht hinsichtlich der Kommunikation) zwei paar Schuhe, da braucht es schon einen geeigneten Ansatz bzw. unterschiedliche Handlings der ganzen Sache (z.B. Communication/Port-Redirect, Forking etc etc)
kabel
 2005-04-14 09:56
#37780 #37780
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
ist die frage was du unter "name" verstehst. du könntest ip+port hernehmen, aber das ist nicht sehr nmemonisch, ausserdem ändert sich der name. also müsstest du ein mini-protokoll erstellen, z.b. "die erste zeile die ein client sendet ist sein name". wenn der sich dann connecten will sendet er "connect $name", wenn er sich disconnecten will "disconnect". jetzt kann jeder client vier zustände haben:
1. er ist nicht verbunden
2. er ist verbunden, hat noch keinen namen gesendet
3. er ist verbunden und hat einen namen gesendet
4. er ist verbunden, hat einen namen und eine verbindung zu einem anderen teilnehmer.
.
.
.
hth
-- stefan
Froschpopo
 2005-04-14 14:08
#37781 #37781
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
die eigentliche Frage ist doch:

wie können die beiden Clients miteinander kommunizieren? Vielleicht sollten wir erst die groben Dinge bequatschen... Soll für jede Unterhaltung zwischen zwei Clients eine neue Socket erstellt werden?
renee
 2005-04-14 15:24
#37782 #37782
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Server:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#! /usr/bin/perl

use strict;
use warnings;
use IO::Socket::INET;
use IO::Select;

# Listensocket erstellen
my $server = IO::Socket::INET->new(
LocalPort => 2005,
type => SOCK_STREAM,
Reuse => 1,
Listen => 10
) or die "Server läuft nicht: $@\n";


my $select = IO::Select->new($server);
my %hash;

# warten, bis ein client sich anmeldet, oder
# man von bereits angemeldeten clients lesen kann
my $answer = 0;
while(my @readable = $select->can_read) {
foreach my $socket (@readable) {
if($socket == $server) { # wenn der socket gleich dem listensocket ist
# Create a new socket
print "New client connects\n";
my $client = $socket->accept; # kehrt direkt zurück
$select->add($client); # in select object aufnehmen
my $name = $client->getline; # von socket lesen
if(defined $name) { # kein Fehler?
$name =~ s!\r?\n$!!g; # Zeilenumbruch entfernen
my ($rname) = $name =~ /^name: ([^\s]+)$/;
print "rname: ",$rname,"\n";
$hash{$rname} = $client;
} else {
next;
}
} else { # sonst
my $line = $socket->getline; # von socket lesen
if(defined $line) { # kein Fehler?
$line =~ s!\r?\n$!!g; # Zeilenumbruch entfernen
if(lc($line) eq "quit") { # falls der Client beenden will
print "Client quits\n";
delete_socket($select, $socket);
}
elsif($line =~ /^msg\s([^\s]+)\s*(.*)$/){
print "name: ",$1,"\n";
my $socket_tmp = $hash{$1};
$socket_tmp->print($2."\n");
}
else { # ansonsten, message ausgeben
print "Client says: [$line]\n";
}
} else {
print "Connection closed by client\n";
delete_socket($select, $socket);
}
}
}
}

# kleine Routine, zum zerstören des sockets
sub delete_socket {
my ($sel, $sock) = @_;
$sel->remove($sock); # socket aus select object entfernen
$sock->close; # socket schliessen
}


Dann habe ich mit zwei "telnets" mit dem Server verbunden...

Telnet1:
Code: (dl )
1
2
3
4
5
6
7
~ 4> telnet 127.0.0.1 2005
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
name: renee
hallo
msg tester hallo zurück du client


Telnet2:
Code: (dl )
1
2
3
4
5
6
7
~ 4> telnet 127.0.0.1 2005
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
name: tester
msg renee hallo
hallo zurück du client
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pKai
 2005-04-18 11:41
#37783 #37783
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Dein Protokoll muss das vorsehen, und der Empfänger muss dem Server glauben, was der ihm über den Absender mitteilt, außer Sender und Empfänger verfügen über eine "sichere" Methode der Autentifizierung (->Kryptographie), die es dem Server (oder einem anderen "man in the middle") unmöglich machen würde die Nachricht zu verfälschen, ohne sie unbrauchbar zu machen.
I sense a soul in search of answers.
GwenDragon
 2005-04-18 12:04
#37784 #37784
User since
2005-01-17
14835 Artikel
Admin1
[Homepage]
user image
[quote=Froschpopo,18.04.2005, 09:24]wie kann ich es denn machen, dass derjenige der die nachricht bekommt auch weiss wer sie geschickt hat ?[/quote]
1. Protokoll https oder SSH
2. Authentifizierung des Clients über ein Zertifikat
sri
 2005-04-18 16:26
#37785 #37785
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Warum muss eigendlich jeder sein eigenes kleines (in diesem Fall extrem schlechtes) Protokoll machen?

Es gibt doch schon IRC und Jabber!!!

tstststs....
zipster
 2005-04-19 15:52
#37786 #37786
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
[quote=pq,19.04.2005, 10:17][quote=Froschpopo,19.04.2005, 01:10]ein böswilliger Client könnte den Server angreifen und abstürzen lassen indem er einfach kein leerzeichen am ende eines streams sendet. Gibt es dafür ein Hausmittel ?[/quote]
ja, gegen böswilige klienten solltest du immer gewappnet sein und den
serverraum mit knoblauch bestücken, das schreckt die klienten ab.

SCNR[/quote]
Der war gut!

he he he...
Froschpopo
 2005-04-18 19:34
#37787 #37787
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
könnt ihr dafür bitte einen eigenen thread aufmachen ;)
<< |< 1 2 3 4 5 >| >> 42 Einträge, 5 Seiten



View all threads created 2005-04-14 14:24.