【问题标题】:TCP/IP communication between Matlab and C++Matlab 和 C++ 之间的 TCP/IP 通信
【发布时间】:2013-04-24 19:24:21
【问题描述】:

我在 Matlab 和 C++ 之间的 TCP/IP 通信中遇到问题。我使用MWinsock 在 C++ 中创建了一个服务器,它可以从客户端发送和接收数据。在 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')

*在服务器上,我使用的是李洋鱼开发的服务器文件(你可以从here下载.exe文件)。

我试过上面描述的问题,你能给出任何解决方案吗? 谢谢!

【问题讨论】:

  • 不看代码就很难分辨。会不会是输出被缓冲了(即你需要刷新)?
  • 是的,让我们看看确切的代码(最好是双方)。 I/O 可以处理细节。
  • (同意 Amro)也许和这里的问题一样:stackoverflow.com/questions/6846924/…?请提供更多详细信息。
  • 请尝试fprintf( t, 'A005\n'); 鼓励同花顺。
  • @XuanThuongTran:澄清一​​下,您使用的是仪器控制工具箱中的tcpip 对象吗?

标签: c++ matlab tcp-ip


【解决方案1】:

你真的看过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 必须首先在单独的控制台中运行(不要忘记在其中输入消息以响应客户端)

【讨论】:

  • 实际上,我从 codeproject 链接阅读了代码和描述,但直到现在我才看到我的问题。现在,我在您的有用帮助和 cmets 中找到了它。如您所说,即 mes_header_len = 6,然后是实际消息。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 2015-12-10
  • 2014-05-10
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多