winsock — клиент C ++ win отправляет переменную сервера linux

Я довольно плохо знаком с программированием на C ++. Я пытаюсь закодировать клиента Windows, который общается с сервером Linux. Эту часть я успешно выполнил.

Теперь я не знаю, что делать, чтобы продолжить это.
Это то, что мне нужно сделать (но не знаю как).

Теперь мой клиент просит 3 вещи.
пример

 declared client variables 1,2,3 as string...

Enter Anything: dgasggfds
//dgasggfds is now stored to cvariable1
Enter Anything again: zxcasd
//zxcasd is now stored to cvariable2
Enter Anything again again: qwert
//qwer is now stored to cvariable3

Теперь клиент должен отправить каждую из этих переменных на сервер.
Сервер также будет использовать эти переменные и выполнять свои коды.

Так что теперь на сервере

 cvariable1 is now svariable1 on the server.
cvariable2 is now svariable2 on the server.
cvariable3 is now svariable3 on the server.

Как только вся переменная будет там, она выполнит код.

Пожалуйста посоветуй. Благодарю.

—редактировать—

Я попытался с помощью send () recv () это работает, но я могу отправить только 1 переменную.
и я не знаю, как установить данные recv в переменную на сервере.

—редактировать—

Я вроде как сохранить данные recv в переменную.
Но все еще не знаю, как это сделать с несколькими данными.

Также 3 переменные всегда должны быть вместе. они не могут быть разделены.
Код сервера нуждается в этих 3 переменных / данных для правильного выполнения cmds.

—редактировать—

Есть ли в этом смысл?

string* packet = new string[3];
packet[0] = 'var1';
packet[1] = 'var2';
packet[2] = 'var3';

//send request
if (send(sock, packet.c_str(), packet.length(), 0) != request.length())
die_with_wserror("send() sent a different number of bytes than expected");

Это дает мне ошибку, хотя. Пакет: выражение должно иметь тип класса.

Сейчас я пытаюсь отправить его в массив и один раз разбить массив на сервере. Это логика?

1

Решение

На стороне клиента объедините три переменные, используя специальный символ для их разделения, например,

string sending = variable1 + "_" + variable2 + "_" + variable3;

и отправить отправку

На стороне сервера

ssize_t bytes_recieved;
char incoming_data_buffer[1000];
bytes_recieved = recv(socketfd, incoming_data_buffer,1000, 0);

у вас будут ваши данные в входящем_данных_буффере. Теперь разделите входящие_данные_буффера, используя «_», у вас будет 3 переменные.

0

Другие решения

У вас есть те же переменные на сервере. Когда клиент прочитал и отправил первую строку, сервер сохраняет ее в первой переменной, как на клиенте. И так далее для двух других.

Подумайте об этом так: сервер получает данные от клиента так же, как клиент получает информацию от пользователя. Единственное отличие состоит в том, что клиент использует, например, cin пока сервер использует recv, На самом деле его можно абстрагировать в отдельный класс, который обрабатывает ввод, тогда вы используете один экземпляр этого класса для cin (или скорее istream), в то время как другой получает свой вход из сокета. Но пользователь этого входного класса использует один и тот же набор функций, независимо от того, откуда поступает ввод.

0

По вопросам рекламы [email protected]