1

我对 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 个变量/数据才能正确执行 cmd。

- 编辑 -

这有道理吗?

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 必须具有类类型。

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

4

2 回答 2

0

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

可以这样想:服务器从客户端接收输入,就像客户端从用户接收输入一样。唯一的区别是客户端使用 egcin而服务器使用recv. 它实际上可以被抽象成一个单独的类来处理输入,然后您使用该类的一个实例进行cin(或更确切地说istream)输入,而另一个从套接字获取其输入。但是这个输入类的用户使用相同的函数集,不管输入来自哪里。

于 2012-11-24T13:23:17.983 回答
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个变量。

于 2012-11-24T13:50:37.967 回答