Piszę program p2p i mam problem z zapętleniem na serwerze tej części:
do {
iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
if (iResult > 0) {
//printf("Bytes received: %d\n", iResult);
printf("Odebrano: ");
for(int i=0;i<recvbuflen;i++){
if(recvbuf[i]>0){
std::cout<<recvbuf[i];
}}
printf("\n");
// Send an initial buffer
//Echo the buffer back to the sender
printf("Podaj tekst: ");
cin.clear();
cin.sync();
cin.getline(recvbuf, DEFAULT_BUFLEN);
recvbuflen=strlen(recvbuf);
iSendResult = send(ClientSocket, recvbuf, recvbuflen, 0);
if (iSendResult == SOCKET_ERROR) {
printf("send failed: %d\n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}}
//}else if (iResult == 0)
//printf("Connection closing...\n");
//else {
//printf("recv failed: %d\n", WSAGetLastError());
//closesocket(ClientSocket);
//WSACleanup();
//return 1;
//}
} while (iResult > 0);
Natomiast na kliencie:
printf("\n");
printf("Podaj tekst: ");
cin.clear();
cin.sync();
cin.getline(sendbuf, DEFAULT_BUFLEN);
printf("\n");
// Send an initial buffer
iResult = send(ConnectSocket, sendbuf, (int) strlen(sendbuf), 0);
if (iResult == SOCKET_ERROR) {
printf("send failed: %d\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
// Receive data until the server closes the connection
do {
iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
if (iResult > 0)
//printf("Bytes received: %d\n", iResult);
{printf("Odebrano: ");
printf("\n");
for(int i=0;i<recvbuflen;i++){
if(recvbuf[i]>0){
std::cout<<recvbuf[i];
}}}
//printf("\n");}
//else if (iResult == 0)
//printf("Connection closed\n");
//else
//printf("recv failed: %d\n", WSAGetLastError());
} while (iResult>0);
Próbowałem zrobić pętle nieskończona za pomocoa while(1) ale w konsoli po odebraniu przez klienta tekstu program stoi.
Nie wiem jak to część zapentlić.