2013-04-21 54 views
2

我在Matlab和C++之间的TCP/IP通信中遇到问题。我用C++创建了一个使用MWinsock的服务器,可以从客户端发送和接收数据。在Matlab中(作为客户端),我创建TCP/IP对象,连接到服务器,并使用fprintf向服务器发送文本[例如,我发送文本“A005”到服务器,fprintf(t, 'A005')]。但是,在使用C++运行的服务器上,只需要接收一些空文本''或者'05'或'A0',有时候是'A005'。所以,任何人都可以在这个问题上给予一些帮助,非常感谢!Matlab和C++之间的TCP/IP通信


谢谢您的回答, 的代码其实就是简单的

*在Matlab中,使用TCP/IP对象:

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

*在服务器上,我使用的开发服务器上的文件由LiyangYu(您可以从here下载.exe文件)。

我尝试过,并得到了上述问题,所以你可以给任何解决方案? 谢谢!

+1

难以辨别的代码。难道是输出缓冲(即你需要刷新)? – Amro 2013-04-21 13:33:06

+0

是的,让我们看看确切的代码(最好是双方)。 I/O可能会很烦琐的细节。 – 2013-04-22 02:08:53

+1

(同意Amro)也许同样的问题在这里:http://stackoverflow.com/questions/6846924/payload-split-over-two-tcp-packets-when-using-boost-asio-when-it-fits-在内?请提供更多细节。 – Offirmo 2013-04-23 10:59:35

回答

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,然后是实际的消息。非常感谢你! – 2013-04-24 16:31:42