TCP / IP связь между Matlab и переполнением стека

У меня проблема в связи TCP / IP между Matlab и C ++. Я создаю сервер в C ++, используя MWinsock, который может отправлять и получать данные от клиента. В Matlab (действует как клиент) я создаю объект TCP / IP, подключаюсь к серверу и использую fprintf отправить текст на сервер [например, я отправляю текст «A005» на сервер, fprintf(t, 'A005')]. Однако на сервере, работающем на C ++, просто получите иногда пустой текст » или только ’05’ или ‘A0’, иногда это ‘A005’. Итак, кто-нибудь может помочь с этой проблемой, большое спасибо!


Спасибо за ответ,
Коды на самом деле просты

* В Matlab используйте объект TCP / IP:

t = tcpip('IPaddress', 1200); %IPaddress get from server after running 'winServer.exe' file.
fopen(t);
fprintf(t, 'A005')

* На сервере я использую файл сервера, разработанный LiyangYu (вы можете скачать .exe файл с Вот).

Я попытался и получил проблему, как описано выше, так что вы могли бы дать какие-либо решения?
Спасибо!

2

Решение

Вы действительно читали код и описание проекта, который вы связано с? Вы не можете просто выбрать какой-нибудь случайный код и ожидать, что он сработает!

Это пример базового сервера чата TCP (плохо запрограммирован, если вы спросите меня). Он работает с сообщениями, отформатированными в соответствии с определенным соглашением:

  • длина сообщения (6 символов выровнены по правому краю с пробелами): sprintf('%6d',len)
  • с последующей строкой сообщения

С учетом вышесказанного, в MATLAB есть простой клиент для взаимодействия с сервером чата C ++:

%# helper functions to send/receive messages according to the protocol
send = @(t,msg) fwrite(t, [sprintf('%6d',length(msg)) msg], 'uint8');
recv = @(t) char(fread(t, str2double(char(fread(t,6,'uint8')')), 'uint8')');

%# connect to server
t = tcpip('127.0.0.1',1200);
fopen(t);

%# send a message
send(t,'hello there')

%# receive response and display it
m = recv(t);
fprintf('[SERVER]: %s\n', m);

%# send BYE message to disconnect from chat
send(t,'bye')

%# close socket and clear it
fclose(t);
delete(t); clear t

Конечно сервер winserver.exe сначала должен быть запущен в отдельной консоли (не забудьте набрать там свои сообщения, чтобы ответить клиенту)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]