작은 과제를 수행 중이며 한 걸음 더 나아갑니다. 작은 TCP 서버/클라이언트를 성공적으로 작성했지만 디렉토리 서버에 등록해야합니다. 이를 위해 DS에 "200 Success"로 회신 할 메시지를 보내야합니다.서버에 메시지 보내기 및 응답 인쇄하기
터미널에서 텔넷으로이 작업을 수행 할 때 서버에 연결하고 메시지를 전달하고 터미널 침을 "200 성공"으로 되돌립니다. 이제 Perl에서이 작업을 수행 할 때 소켓을 열어 (성공적으로) $ (여기서 $ reg는 소켓 이름)으로 메시지를 보냅니다.
print <$reg>;
는 행운로 서버 응답을 얻을 :
print $reg "Message goes here";
나는 추가했습니다. 나는이 메시지를 다시 얻는 방법을 확신 할 수 없기 때문에 좀 더 붙어 있으며 올바르게 전송되는지 확신 할 수 없습니다. 여기 내 소켓은 이전의 주요 하위 호출입니다 :
# Server registration
print ®ister . "\n";
sub register {
my $reg = IO::Socket::INET->new (
PeerHost => "server goes here",
PeerPort => port goes here,
Proto => $protocol
) or die "Failed to make socket for directory registration: $!\n";
print $reg "Register <my name> $ipaddr $port" . '\r'; #with required carriage return, this works in telnet too
my $msg = <$reg>;
print $msg;
}
스트림을 플러시 했습니까? 핸들이'autoflush'로 설정되지 않고 실제 메시지에 따라 메시지가 버퍼에 남아 있기 때문에 메시지가 전송되지 않았을 수 있습니다. 라인 엔딩을 사용하지 않는 메시지 프로토콜을 처리 할 때와 같은 문제가있었습니다. – Axeman
스크립트 시작 부분에'| $ = 1'이 있는데, 자동 플러시를 처리해야합니다. 맞습니까? 나는 아직도 상대적으로 펄에 익숙하지 않다. – rusty
코드의 다른 부분이 실행 취소되지 않는 한 그래야합니다. 명시적인 플러시를 시도하고 차이가 있는지 확인하십시오. – Axeman