C ++ win client发送linux服务器变量

时间:2012-11-24 13:07:31

标签: c++ winsock send recv

我对c ++编程很新。我正在尝试编写与Linux服务器通信的Windows客户端。那部分我已成功完成。

现在我不知道该怎么做才能继续这个。 这就是我需要做的事情(但不知道如何)。

现在我的客户要求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");

虽然它给了我一些错误。 packet:expression必须具有类类型。

我现在要做的是将它发送到一个数组中,并在服务器上将数组分解一次,这个逻辑还可以吗?

2 个答案:

答案 0 :(得分:0)

您在服务器上也有相同的变量。当客户端读取并发送第一个字符串时,服务器将其存储在第一个变量中,就像在客户端上一样。等等其他两个。

可以这样想:服务器从客户端接收输入,就像客户端从用户接收输入一样。唯一的区别是客户使用例如服务器使用cinrecv。它实际上可以被抽象为一个处理输入的单独类,然后你将该类的一个实例用于cin(或更确切地说是istream)输入,而另一个从套接字获取它的输入。但是无论输入来自何处,此输入类的用户都使用相同的函数集。

答案 1 :(得分:0)

在客户端使用特殊字符连接三个变量以分隔它们,例如

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

并发送

在服务器端

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

您将在incoming_data_buffer中获取数据。现在使用“_”分割incoming_data_buffer,你将得到3个变量。