毕业设计需要利用matlab实现tcp连接中客户端的需求,而客户端需要借助socket来实现,
所以需要解决的问题是在matlab中实现socket网络功能,实验环境为linux。
通过查阅资料,总结得出实现的方法:
1)利用Java的socket编程,将客户端的功能集中到一个自定义的类Client
2)在Matlab中调用Java自定义的类Client
一、Java中Client类的实现
直接Java提供的Socket接口来实现即可,封装的类Client提供了五个成员函数供调用
public String initConnection(String address)
public String closeConnection()
public int readData()
public boolean writeData(int key)
public boolean writeString(String str)
/* @file
* @author liujianhua
* @date 2016.3.28
*
* @section DESCRIPTION
*
* The Client class represents the client of a tcp connection
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class Client{
public Socket server;
public DataInputStream netInputStream;
public DataOutputStream netOutputStream;
public byte[] readResult;
public String initConnection(String address){
try{
InetAddress addr = InetAddress.getByName(address);
server = new Socket(addr,5678);
netInputStream = new DataInputStream(server.getInputStream());
netOutputStream = new DataOutputStream(server.getOutputStream());
readResult = new byte[1024];
}catch(Exception e)
{
return "init connection fail";
}
return "init connection success";
}
public String closeConnection()
{
try{
netInputStream.close();
netOutputStream.close();
server.close();
}catch(Exception e)
{
return "close connection fail";
}
return "close connection true";
}
public int readData()
{
int data = -1;
try{
netInputStream.read(readResult);
String result = new String(readResult);
Integer inter = new Integer(result);
data = inter.intValue();
}catch(Exception e)
{
return -1;
}
return data;
}
public boolean writeData(int key)
{
try{
String str = Integer.toString(key);
netOutputStream.write(str.getBytes());
}catch(Exception e)
{
return false;
}
return true;
}
public boolean writeString(String str)
{
try{
netOutputStream.write(str.getBytes());
}catch(Exception e)
{
return false;
}
return true;
}
}
二、在Matlab中调用Java自定义的类Client
1)定义Matlab中Java环境的ext目录
2)将Java程序打包成jar文件,并放入ext目录(选择上面结果第一个)
利用eclipse来实现
选择项目Export
JAR文件放置的目录为上面所得的ext目录的第一个
3)重新启动Matlab,即可以使用Java自定义的类Client
新建脚本文件useclient.m
client = Client;
disp(client.initConnection('127.0.0.1'));
while 1
num = input('input the integer you want to send:');
client.writeData(num);
if num == 0
res = client.readData();
break;
end
end
disp(client.closeConnection());
在命令行执行即可
可能出现的问题:
在第一次实验的出现无法识别JAVA自定义的类的现象,
java.lang.UnsupportedClassVersionError
研究发现是eclipse编译使用的JDK的版本为1.8,而matlab中java环境的jdk版本为1.6,
低版本不能够兼容高版本,因此出现错误。
查看matlab中java环境的jdk的版本
因此我的做法是在原有1.8版本的jdk的基础上,安装了1.5版本jdk,并且在eclipse中设定Java Compiler
参考文章:
http://xiaolongfeixiang.iteye.com/blog/1772871
http://www.cnblogs.com/rond/p/3565113.html