2011-03-26 5 views
0

연결을 허용하고 클라이언트에게 메시지를 보내는 실험적인 서버 프로그램을 작성하려고합니다. 연결할 클라이언트가 있지만 정말 이상한 일을하지 않으면 메시지를 보낼 수 없습니다. 나는 텔넷을 통해 연결할 때, 그것은 아무것도 표시되지 않습니다 그냥 종료, Winsock의 send()가 이상하게 작동합니다.

int sendRes; 
char buf[1024]; 
strcpy_s(buf,"Testing!"); 
sendRes = send(conn,buf,strlen(buf),0);
음 :

예를 들어,이 싹둑에서, conn는 연결된 소켓입니다. 그러나이 닙의 끝에 cout << sendRes 줄을 추가하면 갑자기 작동하여 테스트가 표시됩니다! 텔넷에서을 다운로드해야합니다.

그래서, 알고있는 사람에게 물어보고 싶습니다. 왜 그렇게 행동합니까?

+1

응용 프로그램에서 shutdown 및 closesocket을 호출한다고 가정합니다. 종료를 호출하기 전에 일부 데이터가 전송되지 않을 수 있습니다. 또한 WireShark 또는 Netmon으로 전선을 조사하십시오. –

답변

1

들어오는 버퍼를 표시하기 위해 텔넷 클라이언트 자체가 줄 끝 표시를 기다리고있을 수 있습니까?

자신의 클라이언트를 작성하고 recv을 사용하여 들어오는 것이 있는지 확인하십시오.

다시 말해, cout이 로컬 측에 있기 때문에 새로운 행과 관련이 없을 수도 있습니다.

전체 텔넷 사양에 대해 RFC854을 확인하십시오 (또는 다시 한번 간단히 작성하십시오).

+0

나는 똑같이 말하려고했으나 그것이 범인인지 아닌지 확실하지 않았다. 왜 '주 (cout)'가 달라질까요? 네트워크 데이터 스트림을 플러시 할 시간입니까? 소켓이 열리거나 닫히는 방법/시점에 관한 좀 더 자세한 내용은 여기서 도움이 될 것입니다. – Will

관련 문제