0

有什么方法可以使用 C++ 将命令从服务器发送到客户端?我使用send()函数,但我必须将数字(如0x100)转换为字符串,然后在客户端将字符串转换为数字......基本上是直接向客户端发送数字的函数......

服务器:

ZeroMemory(msg,sizeof(msg));
wsprintf( msg , "142");
send(connect_sock ,(char*) msg , sizeof(msg) , 0);

客户:

ZeroMemory(msg,sizeof(msg));    
recv (connect_sock, msg, sizeof(msg)-1, 0);
int i = atoi(msg);
if ( i == 142 )
...
4

2 回答 2

1

很简单——你不能,但你可以自己写,或者你可以找到为你完成一切的库。

1) boost::asio (c++) 有序列化例子

2) telnet 协议的 libcli (c) ( https://github.com/dparrish/libcli )

3)libtpl(c)序列化(http://troydhanson.github.io/tpl/

还有很多...

原始描述符示例(使用 libtpl 打包 argv):

自行连接和创建 serverFd

tpl_node *tn;
char* bufferArgv;

/** @todo pass array or string? */
tn = tpl_map("iA(s)", &argc, &bufferArgv);
tpl_pack(tn, 0); 

char** _argv;
for (_argv = argv; *_argv != 0; _argv++)
{
    bufferArgv = *_argv;
    tpl_pack(tn, 1);
}

tpl_dump(tn, TPL_FD, serverFd);
tpl_free(tn);

打开包装

tpl_node *tn;
char* bufferArgv;
int argc;

tn = tpl_map("iA(s)", &argc, &bufferArgv);
tpl_load(tn, TPL_FD, serverFd);
tpl_unpack(tn, 0);

如果您足够勇敢,请更换 tpl_dump 和 tpl_load 并发送原始 tn.data

于 2013-11-12T10:38:32.130 回答
0

你可以这样尝试,使用系统函数 Server :

wsprintf(味精,“142”);发送(connect_sock,(char*) msg​​, sizeof(msg), 0);

客户 :

recv (connect_sock, msg, sizeof(msg)-1, 0); 字符串结果 = system("./%s", msg) ;

我不确定功能。请检查一下并告诉我。

于 2013-11-12T10:59:04.270 回答