您的位置:首页 > 理论基础 > 计算机网络

linux环境下Matlab中socket网络功能的实现

2016-03-28 21:21 211 查看
毕业设计需要利用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: