Leser: 1
|< 1 2 >| | 16 Einträge, 2 Seiten |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl
use IO::Socket;
my $client = 0;
my $server_socket = new IO::Socket::INET ( localPort => 13, Listen => $SOMAXCONN, Proto => 'tcp', Reuse => 1) || die "blabla";
print "\nWartend..\n";
&read();
$server_socket->close();
sub read()
{
$client = $server_socket->accept();
print <$client>;
}
Quotewenn dein protokol nicht zeilenweise aufgebaut ist, ist es geschickter, die länge der nachricht in die ersten 4 bytes zu packen und dann mit $socket->read zuerst die ersten 4 bytes der nachricht und dann die restlichen daten zu lesen. sonst kommst du immer in diesen blocked state...
Quoteaußerdem solltest du mit IO::Select testen, ob daten auf dem socket vorhanden sind, bevor du anfängst zu lesen.
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
#!/usr/bin/perl
use IO::Socket;
socket(SOCKET,PF_INET,SOCK_STREAM, getprotobyname('tcp')) || die "blabla";
$sockaddr = sockaddr_in(13, INADDR_ANY);
bind (SOCKET, $sockaddr) || die "bind tuts nich";
listen(SOCKET, SOMAXCONN) || die "listen tuts nicht";
print "/nWartend\n";
&read();
close(SOCKET);
sub read()
{
accept(CONNECT,SOCKET);
while(defined($line= <CONNECT>))
{
print $line;
}
close(CONNECT);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl
use IO::Socket;
my $client = 0;
my $server_socket = new IO::Socket::INET ( localPort => 13, Listen => $SOMAXCONN, Proto => 'tcp', Reuse => 1) || die "blabla";
print "\nWartend..\n";
&read();
$server_socket->close();
sub read()
{
$client = $server_socket->accept();
my $byte;
while (sysread($client, $byte, 1) == 1) {
print STDOUT $byte;
}
}
|< 1 2 >| | 16 Einträge, 2 Seiten |