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

本文介绍在Linux环境中,如何在Matlab中通过Java实现TCP客户端的socket功能。首先创建一个Java类`Client`进行socket编程,然后在Matlab中调用这个Java类,实现网络连接、数据读写等操作。由于版本兼容问题,可能出现Matlab无法识别Java类的情况,解决方案是调整eclipse的JDK版本以匹配Matlab的Java环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

毕业设计需要利用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值