【发布时间】:2010-05-01 00:14:54
【问题描述】:
在我的应用程序中,我有一个服务器在 localhost 的端口上侦听客户端连接。然后我让客户端运行并与服务器建立连接。我在 C# 中使用 tcpListner 作为服务器,客户端是使用 Inet 函数用 perl 编写的。
客户端和服务器之间的连接建立没有问题,并且服务器接收到来自客户端的消息。但是,大约 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");
【问题讨论】:
-
您是否有(小)代码示例可以重现该问题?
-
如果没有更多上下文,很难回答这个问题。服务器或客户端是否在某个时候退出?在这 3 到 4 秒内,客户大概在做什么?服务器如何处理多个会话?哪一端在抱怨丢失的连接:服务器、客户端还是两者都有?
-
两端都没有检测到连接丢失。我发现使用 netstat 命令丢失了连接。连接状态为“close_wait”。在 perl 脚本发出第一条消息后,我放了一个 sleep 函数。然后我发送第二条消息。我只收到了第一条消息。 sleep 函数使 perl 脚本睡眠大约 3 或 4 秒。这里是 Perl 脚本代码:
-
$tx_socket = IO::Socket::INET->new(PeerAddr => '127.0.0.1', PeerPort => 9000, LocalPort => 8000, Proto => 'tcp', Type = >SOCK_STREAM, Reuse=>1 ) 或 die("$!\n"); die("init_tx_socket 失败!\n") 除非 $tx_socket; print "套接字好!\n"; $tx_socket->autoflush(1); $tx_socket->print("你好");睡眠(5); $tx_socket->print("世界");
-
对不起代码的格式。我只是复制并粘贴它。