我正在尝试在 PC 上运行的 matlab 和 Android 设备(Galaxy 选项卡)之间建立可靠的连接
我的客户端代码基于此链接中的出色示例。在此示例中,服务器是在 pc 上运行的 java 应用程序。我用 java 应用程序运行了这个例子,它运行良好。
我的 matlab 代码基于我在 Mathworks 中找到的代码:(我的代码发布在下面)
不幸的是,行为非常不一致,通常情况下,根本没有联系。(有时它确实有效,但只发送一个字)
我不明白服务器端是如何工作的,代码行“ServerConnect”是阻塞的吗?它必须与客户端同步吗?
提前致谢!
爱丽儿
这是我的matlab代码:
这是主程序:
import java.net.ServerSocket
import java.io.*
MessageStr = {'THIS','IS','MY','MESSAGE'};
server_socket = ServerConnect(4444,inf);
output_socket = server_socket.accept;
for k = 1:length(MessageStr)
pause(3);
ServerSend(MessageStr{k},server_socket,output_socket);
end
%clean
close(server_socket);
这是函数 ServerConnect 的代码
function server_socket = ServerConnect(output_port, number_of_retries)
import java.net.ServerSocket
import java.io.*
retry = 0;
server_socket = [];
fprintf(1, 'waiting for client to connect\n');
while true
retry = retry + 1;
try
if ((number_of_retries > 0) && (retry > number_of_retries))
fprintf(1, 'Too many retries\n');
break;
end
%fprintf(1, ['Try %d waiting for client to connect to this ' ...
% 'host on port : %d\n'], retry, output_port);
% wait for 1 second for client to connect server socket
server_socket = ServerSocket(output_port);
server_socket.setSoTimeout(1000);
fprintf(1, 'Client connected\n');
break;
catch
if ~isempty(server_socket)
server_socket.close
end
% pause before retrying
pause(1);
end
end
end
服务器发送的代码:
function ServerSend(message,server_socket,output_socket);
import java.net.ServerSocket
import java.io.*
try
output_stream = output_socket.getOutputStream;
d_output_stream = DataOutputStream(output_stream);
% output the data over the DataOutputStream
% Convert to stream of bytes
fprintf(1, 'Writing %d bytes\n', length(message))
d_output_stream.writeBytes(char(message));
d_output_stream.flush;
catch
end
end