2010-05-01 9 views
1

제 응용 프로그램에서 클라이언트 연결을 위해 localhost의 포트에서 수신하는 서버가 있습니다. 그런 다음 클라이언트를 실행하고 서버와의 연결을 설정합니다. 나는 서버용으로 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

문제를 재현하는 (작은) 코드 샘플이 있습니까? –

+0

좀 더 많은 문맥없이 이것을 대답하는 것은 매우 어렵습니다. 어떤 시점에서 서버 또는 클라이언트가 종료됩니까? 대략 3 초에서 4 초 사이에 고객은 무엇을하고 있습니까? 서버가 여러 세션을 어떻게 처리합니까? 어느 쪽이 연결 상실에 대해 불평하고 있습니까? 서버, 클라이언트 또는 둘 다? –

+0

어느 쪽도 연결 유실을 감지하지 못합니다. netstat 명령을 사용하여 연결이 끊어짐을 알았습니다. 연결 상태는 "close_wait"입니다. 나는 perl 스크립트가 첫 번째 메시지를 보낸 후에 sleep 함수를 넣는다. 그런 다음 두 번째 메시지를 보냅니다. 나는 첫 번째 메시지 만 받았다. sleep 함수는 perl 스크립트를 약 3 ~ 4 초 동안 잠자 게합니다. 여기 펄 스크립트 코드 : – alex

답변

1

캡처 네트워크 Microsoft 네트워크 모니터 또는 Wireshark를 가진 패킷, 또는 추적 System.Net을 사용합니다.

소켓 문제는 그러한 분석없이 쉽게 분석하고 처리 할 수 ​​없습니다.

관련 문제