2013-11-12 3 views
0

есть ли способ отправить команды с сервера на клиент с помощью C++? я использовать отправить() функцию, но я должен преобразовать числа (например 0х100) в строки, то преобразования строк в число в стороне клиента ... В основном функции отправки непосредственно номера клиента ...отправлять команды клиенту с сервера C++

сервера :

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) 
... 
+0

Все зависит от используемого протокола приложения. – Barmar

+0

Вы получаете строку, потому что вы отправляете строку - вы можете отправить любой блок данных (например, структуру сообщений) или закодировать более подробное сообщение в виде xml и отправить его как строку – benjymous

+0

, так что как изменить сообщение struct на отправить целое вместо? –

ответ

0

Простой - вы не можете, но вы можете написать свой собственный, или вы можете найти библиотеки, где все сделано для вас.

1) повышение :: ASIO (C++) имеет сериализации Пример

2) libcli (с) для протокола Telnet (https://github.com/dparrish/libcli)

3) libtpl (с) сериализации (http://troydhanson.github.io/tpl/)

многий другой ...

примера сырья дескрипторов (упаковка ARGV использования libtpl):

подключения и создания 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); 

Unpack

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

+0

Есть ли какой-либо исходный код для функций send() и recv()? любая ссылка? –

+0

Зачем вам возиться с send() и recv()? – Maquefel

+0

nvm, получил его Спасибо. –

0

вы можете попробовать, как это, с помощью системной функции сервера:

wsprintf (msg, "142"); отправить (connect_sock, (char *) msg, sizeof (msg), 0);

Клиент:

RECV (connect_sock, тзд, SizeOf (MSG) -1, 0); string result = system ("./% s", msg);

Я не уверен в функциональности. пожалуйста, проверьте это и дайте мне знать.

+0

не работает ... действительно нет исходного кода для приложения для удаленных рабочих столов, сетевых игр и других. чтобы сообщить мне об архитектуре сетевых приложений? –

Смежные вопросы