2013-04-21 3 views
2

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


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

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

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

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

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

+1

сложно сказать, не видя кода. Может ли быть, что вывод буферизирован (т. Е. Вам нужно скрыться)? – Amro

+0

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

+1

(согласен с Amro) Возможно, такая же проблема, как здесь: http://stackoverflow.com/questions/6846924/payload-split-over-two-tcp-packets-when-using-boost-asio-when-it-fits- внутри? Пожалуйста, дайте более подробную информацию. – Offirmo

ответ

0

Вы действительно прочитали код и описание вашего проекта linked to? Вы не можете просто выбрать какой-то случайный код и ожидать его работы!

Это пример базового чат-сервера 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

На самом деле, я прочитал код и описание из ссылки codeproject, но до сих пор я не мог видеть свою проблему. Теперь я нашел его с полезными подсказками и комментариями. Как вы сказали, это mes_header_len = 6, за которым следует фактическое сообщение. Большое спасибо! –

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