2010-05-01 5 views
1

Dans mon application, j'ai un serveur d'écoute sur un port sur localhost pour la connexion client. Ensuite, j'ai des clients en cours d'exécution et établit une connexion avec le serveur. J'ai utilisé tcpListner dans C# pour le serveur et les clients ont été écrits en perl en utilisant la fonction Inet.La connexion TCP a perdu des problèmes dans C#

La connexion entre les clients et le serveur a été établie sans problème et un message du client est reçu par le serveur. Cependant, après environ 3 à 4 secondes, la connexion est perdue. J'utilise netstat -a pour voir si le statut de la connexion est toujours "établi". Le résultat est "Close_wait" après avoir utilisé la commande netstat sous DOS.

Comment puis-je corriger ce problème? Quel côté provoque la perte de connexion?

Merci

Edit:

$tx_socket = IO::Socket::INET->new(PeerAddr => '127.0.0.1', PeerPort => 9000, 
    LocalPort => 8000, Proto => 'tcp', 
    Type =>SOCK_STREAM, Reuse=>1) or die("$!\n"); 
die("init_tx_socket failed!\n") unless $tx_socket; print "Socket good!\n"; 
$tx_socket->autoflush(1); $tx_socket->print("Hello"); 
sleep(5); 
$tx_socket->print("World"); 
+1

avez-vous un (petit) échantillon de code qui reproduit le problème? –

+0

Il est très difficile d'y répondre sans plus de contexte. Est-ce que le serveur ou le client quitte à un moment donné? En gros, que font les clients pendant ces 3 à 4 secondes? Comment le serveur gère-t-il plusieurs sessions? Quelle extrémité se plaint de la perte de connexion: serveur, client ou les deux? –

+0

Aucune extrémité ne détecte la perte de connexion. J'ai découvert que la connexion est perdue en utilisant la commande netstat. L'état de la connexion est dans "close_wait". Je mets une fonction de veille après que le script perl envoie le premier message. Ensuite, j'envoie un deuxième message. Je n'ai reçu que le premier message. La fonction sleep dort le script perl pendant environ 3 ou 4 secondes. Voici le code de script Perl: – alex

Répondre

1

paquets Capturing réseau avec Microsoft Network Monitor ou Wireshark, ou utiliser System.Net calque.

Les problèmes de socket ne peuvent pas être facilement analysés et traités sans une telle analyse.