Некоректная передача данных через сокеты
Суть проблемы: когда я отправляю серверу или клиенту сообщение в длину больше чем в одно слово (Например: "Hello client"), то в переменную msg записывается только "Hello" и отправляется тоже "Hello".
Я так полагаю, это проблема из-за cin, но я не знаю как можно обойтись без него.
Как можно решить эту проблему? И можно ли передавать данные через string, а не через char buff[256]?
Код сервера:
int main() {
int sock;
sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server_address;
server_address.sin_port = htons(8887);
server_address.sin_family = AF_INET;
inet_aton("192.168.0.60", &server_address.sin_addr);
bind(sock, (struct sockaddr *) &server_address, sizeof(server_address));
listen(sock, 3);
int client_sock;
client_sock = accept(sock, 0, 0);
char hello[256] = "Hello client";
send(client_sock, &hello, sizeof(hello), 0);
char buff[256];
recv(client_sock, &buff, sizeof(buff), 0);
cout << buff << endl;
char msg[256] = "";
cout << "msg >> ";
cin >> msg;
send(client_sock, msg, sizeof(msg), 0);
recv(client_sock, &buff, sizeof(buff), 0);
cout << buff << endl;
return 0;
}
Код клиента:
int main() {
int sock;
sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(8887);
inet_aton("192.168.0.60", &server_address.sin_addr);
int con = connect(sock, (struct sockaddr *) &server_address, sizeof(server_address));
char hello[256] = "Hello server";
send(sock, &hello, sizeof(hello), 0);
char buff[256];
recv(sock, &buff, sizeof(buff), 0);
cout << buff << endl;
char msg[256] = "";
recv(sock, &msg, sizeof(msg), 0);
cout << msg << endl;
cout << "msg >> ";
cin >> msg;
send(sock, &msg, sizeof(msg), 0);
return 0;
}