Некоректная передача данных через сокеты

Суть проблемы: когда я отправляю серверу или клиенту сообщение в длину больше чем в одно слово (Например: "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;
}

Ответы (0 шт):