从服务器c ++向客户端发送命令

时间:2013-11-12 09:59:19

标签: c++ sockets

有没有办法用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 )
...

2 个答案:

答案 0 :(得分:1)

简单 - 您不能,但您可以自己编写,或者您可以找到可以为您完成所有操作的库。

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

2)libcli(c)用于telnet协议(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并发送raw tn.data

答案 1 :(得分:0)

你可以尝试这样,使用系统功能 服务器:

wsprintf(msg,“142”); send(connect_sock,(char *)msg,sizeof(msg),0);

客户:

recv(connect_sock,msg,sizeof(msg)-1,0); string result = system(“./%s”,msg);

我不确定abt功能。请检查这个并告诉我。