Gast: Hilfe bei TCP Server/Client

Beitrag lesen

Vielleicht kam das bei meinem ersten Text nicht ganz rüber. Im Moment lese ich Daten von der Tastatur mit <STDIN> mit dem Client ein. Diese Daten sende ich mit ->send() über den erstellten Socket zum Server (Server liest mit ->recv() ein). Der Server soll diesen Text fehlerfrei darstellen und gleich wieder zum Client zurücksenden. Und das Problem bei <STDIN> ist ja das nur 1024 oder evtl. auch 2048 Zeichen möglich sind, alles was darüber hinaus geht wird abgeschnitten und nicht zum Server gesendet, so meine Erfahrungen.

Nun sollen aber irgendwas in die 500 ZEILEN Text eingegeben werden können und fehlerfrei zwischen Client - Server -> Server - Client übertragen werden und danach sollte man theoretisch wieder 500 ZEILEN Text eingeben können, <STDIN> wirkt in diesem Fall aber blockierend.

Vielleicht poste ich einfach mal meinen Code ... :) Aber danke schonmal für die Antworten. Ich hoffe meine auskommentierten Testversuche zwischendurch stören nicht zu sehr

-Server-

#!/usr/bin/perl  
#tcpserver.pl  
  
use IO::Socket::INET;  
  
  
# flush after every write  
$| = 1;  
  
my ($socket,$client_socket);  
my ($peeraddress,$peerport);  
  
# creating object interface of IO::Socket::INET modules which internally does  
# socket creation, binding and listening at the specified port address.  
$socket = new IO::Socket::INET (  
LocalHost => '127.0.0.1',  
LocalPort => '5000',  
Proto => 'tcp',  
Listen => 5,  
Reuse => 1  
) or die "ERROR in Socket Creation : $!\n";  
  
print "SERVER Waiting for client connection on port 5000\n";  
  
while(1)  
{  
# waiting for new client connection.  
$client_socket = $socket->accept();  
  
# get the host and port number of newly connected client.  
$peer_address = $client_socket->peerhost();  
$peer_port = $client_socket->peerport();  
  
print "Accepted New Client Connection From : $peer_address, $peer_port\n ";  
  
# write operation on the newly accepted client.  
while(1)  
{  
#$data = "DATA from Server";  
  
# we can also send the data through IO::Socket::INET module,  
$client_socket->recv($data,1024);  
print "Received from Client : $data\n";  
#print $client_socket "$data\n";  
$client_socket->send($data);  
  
# read operation on the newly accepted client  
#$data = <$client_socket>;  
# we can also read from socket through recv()  in IO::Socket::INET  
  
  
}  
}  
  
$socket->close();

-Client-

#!/usr/bin/perl  
#tcpclient.pl  
  
use IO::Socket::INET;  
  
  
# flush after every write  
$| = 1;  
  
my ($socket,$client_socket);  
  
# creating object interface of IO::Socket::INET modules which internally creates  
# socket, binds and connects to the TCP server running on the specific port.  
$socket = new IO::Socket::INET (  
PeerHost => '127.0.0.1',  
PeerPort => '5000',  
Proto => 'tcp',  
) or die "ERROR in Socket Creation : $!\n";  
  
print "TCP Connection Success.\n";  
  
# read the socket data sent by server.  
while(1)  
{  
#$data = <$socket>;  
# we can also read from socket through recv()  in IO::Socket::INET  
  
print "Bitte Text eingeben: ";  
$data = <STDIN>;  
  
#open(TEXT,"/home/marcel/Desktop/Text.txt") || die $!;  
#$data = <TEXT>;  
$socket->send($data);  
#close(TEXT);  
$socket->recv($data,1024);  
  
#$socket->send($data);  
#$socket->recv($data,1024);  
print "Received from Server : $data\n";  
  
# write on the socket to server.  
#$data = "DATA from Client";  
  
#print $socket "$data\n";  
}  
# we can also send the data through IO::Socket::INET module,  
#$socket->send($data);  
  
sleep (10);  
$socket->close();