C++ (서버) 및 PHP (클라이언트)의 소켓에 문제가 있습니다. 아래는 코드입니다. 문제는 pClient-> send() 함수가 -1 또는 0을 반환해야한다는 것입니다 (실패로 인해 클라이언트가 연결 해제 될 때마다). 그러나 그렇지 않습니다. 따라서 루프를 중단 할 수 없으며 프로그램이이 함수에서 실패합니다. 내가 도대체 뭘 잘못하고있는 겁니까? 네가 나를 도울 수 있기를 바랍니다.클라이언트 연결 해제 후 CSimpleSocket 오류가 발생했습니다.
int sentSucces=0;
char szData[MAX_PACKET];
memset(szData, 0, MAX_PACKET);
CPassiveSocket socket;
CActiveSocket *pClient = NULL;
sendInterval = 10;
socket.Initialize();
socket.Listen((const uint8 *) "127.0.0.1", 9876);
socket.SetNonblocking(); //if no connection in queue, don't wait (accept())
while (1) {
//check queue for connections.
if ((pClient = socket.Accept()) != NULL) {
pClient->SetNonblocking();
cout << "++ connected\n";
while (1) {
// Receive request from the client.
cout << "- receiving....\n";
if (pClient->Receive(MAX_PACKET) > 0) {
cout << "-- received\n";
strncpy(szData, (const char *) pClient->GetData(), pClient->GetBytesReceived());
cout << "-- +: " << szData << "\n";
//clear memory of szData
memset(szData, 0, MAX_PACKET);
} else {
cout << "-- NOT received\n";
}
string bericht = "hallo";
cout << "sending....\n";
sentSucces = pClient->Send((const uint8 *) bericht.c_str(), strlen(bericht.c_str()));
cout << "++ send:" << sentSucces << "\n";
if (sentSucces < 1) break;
sleep(4);
}
cout << "++ disconnecting...\n";
pClient->Close();
cout << "++ disconnected\n";
} else {
// cout << "++ no connections\n";
}
usleep(10000);
}
TCP를 통해 어떤 프로토콜을 구현합니까? 프로토콜 사양에 따라 클라이언트가 서버 단절을 감지해야한다고 어떻게 알 수 있습니까? (당신이 당신의 프로토콜을 문서화하지 않았다면 그것은 당신의 문제입니다. 당신이 TCP 전문가 일 때까지 당신이 구현 한 모든 프로토콜을 문서화해야합니다. 코드는 코드의 다른 부분과도 작동합니다.) 또한,'Receive' 코드 경로에서 어떤 오류 케이스도 처리하지 않으시겠습니까? –