지금 소켓 프로그래밍을 사용하고, 프로세스가 될 때 :왜 recv()가 멈 춥니 까? 다음
클라이언트 ------- 이름을 보내기 ------는 scanf에서 사용자 이름()을 받기 ----- ---- 서버
서버 ------- 확인 메시지 ------- 클라이언트 보내기
클라이언트 ------ 승인을 받기 -----는 scanf에서 암호를 가져옵니다() ------ 암호 전송 ---------- 서버
서버 ------- 암호 얻기
하지만 두 번째 recv()에서 서버가 멈 춥니 다. 나는 그것에 대해 봤는데 그것에 대한 유일한 답은 읽기 경계 문제이지만, 사용자 이름에 대해 얼마나 많은 바이트를 가져야하는지 서버에 알 렸습니다. '무엇에 대한 t 그림'진행 ...
코드 클라이언트 :
printf("Please enter the username: ");
scanf("%s", username);
//send username
datalen = strlen(username);
temp = htonl(datalen);
send(simpleSocket, (char*)&temp, sizeof(datalen),0);
bytes_sent = send(simpleSocket, (char*)&username, datalen,0);
//waiting acknowledge
bytes_recv = recv(simpleSocket, (char*)&acknowledge,sizeof(acknowledge), 0);
if(bytes_recv > 0){
printf("Got Acknowledge!\n");
}
else{
printf("Didn't Get Acknowledge!\n");
}
//if get acknowledge, get password
if(bytes_recv > 0){
printf("Please enter the password: ");
scanf("%s", password);
//send password
datalen = strlen(password);
temp = htonl(datalen);
bytes_sent = send(simpleSocket, (char*)&temp, sizeof(datalen),0);
bytes_sent = send(simpleSocket, (char*)&password, datalen, 0);
printf("Bytes_sent(password): %d\n", bytes_sent);
}
코드 서버 :
int buflen = 0;
bytes_recv = recv(simpleChildSocket, (char*)&buflen, sizeof(int), 0);
buflen = ntohl(buflen);
//printf("%d\n", buflen);
bytes_recv = recv(simpleChildSocket, username, buflen, 0);
if(bytes_recv > 0){
printf("Sent Acknowledge!\n");
char acknowledge[256] = "Have Gotten Username!";
bytes_sent = send(simpleChildSocket, acknowledge,strlen(acknowledge),0);
index = CheckUsername(username);
printf("Index at: %d\n", index);
}
else{
printf("Didn't receive username!\n");
close(simpleChildSocket);
}
//read password
bytes_recv = recv(simpleChildSocket, (char*)&buflen, sizeof(int), 0);
buflen = ntohl(buflen);
bytes_recv = recv(simpleSocket, password, buflen, 0);
if(bytes_recv > 0){
printf("Bytes_recv(password): %d\n", bytes_recv);
if(password == PASSWORD[index]){
printf("Match Success!\n");
}
}
else{
printf("Didn't Get Password!");
close(simpleChildSocket);
}