2010-05-01 132 views
1

在我的應用程序中,我有一個服務器監聽localhost上的端口以進行客戶端連接。然後我有客戶端運行並建立與服務器的連接。我在c#中使用tcpListner作爲服務器,客戶端使用Inet函數在perl中編寫。c連接中的TCP連接丟失問題#

客戶端與服務器之間的連接建立時沒有問題,服務器接收到來自客戶端的消息。但是,大約3到4秒後,連接丟失。我使用netstat -a來查看連接的狀態是否仍然「已建立」。在DOS上使用netstat命令後,結果爲「Close_wait」。

如何調試此問題?哪一方造成連接丟失?

感謝

編輯:

$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

你有(小)代碼樣本,再現問題? – 2010-05-01 00:19:04

+0

在沒有更多上下文的情況下回答這個問題是非常困難的。服務器或客戶端是否在某個時候退出?大概在3到4秒內客戶做了什麼?服務器如何處理多個會話?哪一端抱怨丟失的連接:服務器,客戶端還是兩者? – 2010-05-01 00:19:34

+0

兩端均未檢測到連接丟失。通過使用netstat命令發現連接丟失。連接狀態處於「close_wait」狀態。 我在perl腳本發出第一條消息後放置了一個睡眠函數。然後我發送第二條消息。我只收到第一條消息。睡眠函數睡眠perl腳本大約3或4秒。 這裏的Perl腳本代碼: – alex 2010-05-01 00:26:28

回答

1

捕獲網絡數據包與Microsoft網絡監視器或Wireshark的,或使用System.Net跟蹤。

沒有這種分析,無法輕鬆分析和處理套接字問題。