项目作者: liruidesysu

项目描述 :
java客户端与matlab服务器之间的简单socket通信
高级语言: Matlab
项目地址: git://github.com/liruidesysu/Matlab-java-Connect.git
创建时间: 2017-06-27T09:02:02Z
项目社区:https://github.com/liruidesysu/Matlab-java-Connect

开源协议:

下载


Matlab-java-Connect

  1. 本例子是有高成英老师指导的软件工程高级实训项目《基于深度学习的多特征融合定位系统开发》中个人负责的模板中的一部分。
  2. 运行环境:Matlab R2014a & Eclipse

一、Matlab端内嵌java代码,通过java调用socket实现通信,下面是简单的Matlab中TCP/IP socket通信例子。

Matlab作为服务端代码

  1. % CLIENT connect to a server and read a message
  2. % Usage - message = client(host, port, number_of_retries)

function message = client(host, port, number_of_retries)

  1. import java.net.Socket
  2. import java.io.*
  3. if (nargin < 3)
  4. number_of_retries = 20; % set to -1 for infinite
  5. end
  6. retry = 0;
  7. input_socket = [];
  8. message = [];
  9. while true
  10. retry = retry + 1;
  11. if ((number_of_retries > 0) && (retry > number_of_retries))
  12. fprintf(1, 'Too many retries\n');
  13. break;
  14. end
  15. try
  16. fprintf(1, 'Retry %d connecting to %s:%d\n', ...
  17. retry, host, port);
  18. % throws if unable to connect
  19. input_socket = Socket(host, port);
  20. % get a buffered data input stream from the socket
  21. input_stream = input_socket.getInputStream;
  22. d_input_stream = DataInputStream(input_stream);
  23. fprintf(1, 'Connected to server\n');
  24. % read data from the socket - wait a short time first
  25. pause(0.5);
  26. bytes_available = input_stream.available;
  27. fprintf(1, 'Reading %d bytes\n', bytes_available);
  28. message = zeros(1, bytes_available, 'uint8');
  29. for i = 1:bytes_available
  30. message(i) = d_input_stream.readByte;
  31. end
  32. message = char(message);
  33. % cleanup
  34. input_socket.close;
  35. break;
  36. catch
  37. if ~isempty(input_socket)
  38. input_socket.close;
  39. end
  40. % pause before retrying
  41. pause(1);
  42. end
  43. end

end

Matlab客户端代码

  1. %ERVER Write a message over the specified port
  2. % Usage - server(message, output_port, number_of_retries)

function server(message, output_port, number_of_retries)

  1. import java.net.ServerSocket
  2. import java.io.*
  3. if (nargin < 3)
  4. number_of_retries = 20; % set to -1 for infinite
  5. end
  6. retry = 0;
  7. server_socket = [];
  8. output_socket = [];
  9. while true
  10. retry = retry + 1;
  11. try
  12. if ((number_of_retries > 0) && (retry > number_of_retries))
  13. fprintf(1, 'Too many retries\n');
  14. break;
  15. end
  16. fprintf(1, ['Try %d waiting for client to connect to this ' ...
  17. 'host on port : %d\n'], retry, output_port);
  18. % wait for 1 second for client to connect server socket
  19. server_socket = ServerSocket(output_port);
  20. server_socket.setSoTimeout(1000);
  21. output_socket = server_socket.accept;
  22. fprintf(1, 'Client connected\n');
  23. output_stream = output_socket.getOutputStream;
  24. d_output_stream = DataOutputStream(output_stream);
  25. % output the data over the DataOutputStream
  26. % Convert to stream of bytes
  27. fprintf(1, 'Writing %d bytes\n', length(message))
  28. d_output_stream.writeBytes(char(message));
  29. d_output_stream.flush;
  30. % clean up
  31. server_socket.close;
  32. output_socket.close;
  33. break;
  34. catch
  35. if ~isempty(server_socket)
  36. server_socket.close
  37. end
  38. if ~isempty(output_socket)
  39. output_socket.close
  40. end
  41. % pause before retrying
  42. pause(1);
  43. end
  44. end

end

二、github中代码实现java客户端与matlab服务器之间的简单socket通信,并通过java传送的图片地址在matlab服务端显示出来。

步骤:

1、Matlab服务端启动,监听。

2、java客户端启动,连接matlab服务器,建立一个socket通信并发送第一张图片。

3、Matlab服务端接收java客户端发送的图片或图片地址,使用窗口显示出来,并返回传送的图片的数量的信息。

4、java客户端接收到来自Matalab服务器反馈回来的信息关闭socket通信,建立下一个socket通信继续发送第二张图片。

5、重复3-4步骤

6、完成socket通信