저는이 문제에 너무 지쳤습니다. 약 5 시간 동안 문제를 해결하려고했지만 여전히 문제를 찾기 위해 semm을 사용할 수 없습니다.Recv은 항상 1 바이트 이하를받습니다.
제 문제는 서버에서 IP를 보낼 때 클라이언트 쪽에서 항상 recv가 1 자릿수 감소하다는 것입니다. 그리고 서버가 항상 항상 1 개 번호없이 온 데이터와 올바른 데이터와 클라이언트 측에서 IP 주소의 오른쪽 액수를 전송하고 항상 서버 보내기 때문에 첫 번째입니다 :
192.168.0.101
클라이언트하면 나타납니다
92.168.0.101
중요한 점은 클라이언트의 이름은 항상 문제없이 수신된다는 것인데, IP 주소에서만 발생합니다.
은에 대해 자세히 살펴 :서버 측 데이터 송신 [2 문자열을 - 첫 번째 클라이언트의 이름이고 두 번째는 자신의 IP ADRESS입니다] :
J 루프 thourght 모든 클라이언트리스트의 반복자입니다
: 클라이언트 변수는 모든 클라이언트의 데이터std::cout << j->client_name << " ";
int lenght = j->client_name.length()+1 ; //+1 for '\0' byte at the client buffer
std::cout << "Lenght (+1): " << lenght << " ";
lenght = htonl(lenght); //change byte order to network
send(client->client_socket,(char*)&lenght,sizeof(int),0);
std::cout << "I have sent: " << send(client->client_socket,j->client_name.c_str(),j->client_name.length(),0) << std::endl;
std::cout << inet_ntoa(j->client_connection.sin_addr) << " "; //showing IP adress
unsigned lenght2 = strlen(inet_ntoa(j->client_connection.sin_addr))+1; //+1 for '\0' byte at the client buffer
std::cout << "Lenght (+1): " << lenght2 << " ";
unsigned realistic_lenght = lenght2;
lenght2 = htonl(lenght2);
send(client->client_socket,(char*)&lenght,sizeof(unsigned),0);
std::cout << "I have sent: " << send(client->client_socket,inet_ntoa(j->client_connection.sin_addr),realistic_lenght,0) << std::endl;
그리고 서버 측 모두에 말했듯이 좋은 것 같다 여기 클라이언트 측에서 데이터를 수신하는 코드입니다 요구되는 일입니다
char* data_buffor;
int lenght = 0;
recv(data.client_socket,(char*)&lenght,sizeof(int),0);
lenght = ntohl(lenght);
std::cout << "I have received: " << lenght << std::endl;
data_buffor = new char[lenght];
if (data_buffor != NULL) std::cout << "ALLOCATION WAS SUCCESFULL" << std::endl;
std::cout << "I have received: " << recv(data.client_socket,data_buffor,lenght,0) << std::endl;
data_buffor[lenght-1] = '\0';
temp.client_name = data_buffor; // everything is fine here
delete data_buffor;
data_buffor = NULL;
unsigned lenght2 = 0;
recv(data.client_socket,(char*)&lenght2,sizeof(unsigned),0);
lenght2 = ntohl(lenght2);
std::cout << "I have received: " << lenght2 << std::endl; // I DONT KNOW WHY BUT HERE I GET CRAZY NUMBERS LIKE 3203 and I should get 14 with IP: 192.168.0.101 + one byte for '\0' I think that may be causing all problems but I have no idea how to fix it.
data_buffor = new char[lenght2];
if (data_buffor != NULL) std::cout << "ALLOCATION WAS SUCCESFULL" << std::endl;
std::cout << "I have received " << recv(data.client_socket,data_buffor,lenght2,0) << std::endl;
temp.client_ip_adress = data_buffor;
all_clients.push_back(temp);
delete data_buffor
data_buffor = NULL;
도움을 주시면 감사하겠습니다.
형식 악의의 생물이 제발. – deW1
Wireshark와 같은 네트워크 분석기로 실제로 서버가 무엇을 보내고 있는지 확인 했습니까? –