图像缩略图

马鞍袋

版本1.3.0.0(31.7 kB) 裘德柯林斯
非阻塞基于TCPIP事件的MATLAB套接字。

1下载

更新2012年8月28日

查看版本历史记录

查看许可证

一个小型Java类,它在单独的线程中实现通道多路复用器,并允许您注册套接字连接和MATLAB回调函数以进行套接字频道事件(op_read和op_accept)。离开命令提示符可供您继续工作,同时运行在后台点火MATLAB回调以处理数据。导致事件的Socketchannel在事件数据中传递到MATLAB回调。无需打开Matlab的多个实例以测试它。我已将echo服务器包含用于测试。

我得到数据速率> 100Mbps。

用法:
有关一个完整的例子,请参阅附加文件中的“main.m”和“emoserver.m”。

安装:
您需要编辑“ClassPath.txt”(在MATLAB命令提示符处键入“编辑ClassPath.txt”),并将路径添加到包含zip文件中的java类的bin目录。

当你完成后,它应该看起来像这样的东西:
......
glnxa64 = $ matlabroot / java / jarext / jogl.a64.jar
matlabroot / java / jarext / jogl.jar美元
C:/ matsock / bin /
mac = / system / library / java
maci = / system / library / java

然后你必须重启matlab。

对针对Java 1.5.0_07的Windows 32位计算机构建了类文件。

我已经包含了源代码,以便如果您需要,您可以在自己的系统上自己编译代码。如果您运行64位,我认为这是必要的。

此提交的启发是由我的工作启发,并由有关UND.CumentedMatlab.com的有用信息启用。特别是这篇文章:
http://undocumentedmatlab.com/blog/matlab-callbacks-for-java-events/

仍然有很多工作要做,使其更具可配置和实现所有网络选项,但似乎似乎运行良好。
尝试一下,让我知道哪些额外的功能会有帮助....请留下评论,让我知道你的想法。

引用

裘德柯林斯(2021年)。马鞍袋(//www.tatmou.com/matlabcentral/fileexchange/35608-matsock), MATLAB中央文件交换。检索

意见及评分(10.

Zach Trotz.

嗨jude,

使用此代码如何实际读取写入服务器的数据?

Marco Peccianti.

亲爱的裘德

谢谢你这个非凡的代码。我能够在没有太多麻烦的情况下运行它。

当我将库放入我的软件的子文件夹中,我添加到我的服务器引导

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%检查matsock库路径是否已添加%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
chk =存在('echoservertestbuffer.m');
如果chk == 0
DISP('添加MATSOCK LIBRARY');
CD matsock_20120828
CDIR = PWD;
AddPath(CDIR);
CD ..
别的
disp('matsock library ...... [好]');
结尾

如果需要,在路径中添加库

我在代码中挖掘一点,似乎当数据发送到服务器时,必须始终以大端口格式的数据包的字节5-8以字节5-8指定数据包的维度(我猜这始于CK报告的错误)。诚实地,我没有熟悉TCP握手,但是,包含在MATLAB工具箱中的TCP服务器(绝对相当不太灵活),允许我在不具体格式化数据包的情况下传输。

你能评论这个特定的选择吗?(并且很抱歉,如果我的问题结果变得微不足道)

最好的

马可

CR.

嗨jude,
我一直在努力以特定的方式制作这项工作,但似乎缺少一些根本。我正在尝试将10个字节从客户端写入10个字节(另一个MATLAB会话上创建的套接字),但不明白如何读取使用ChannelRead()。我必须抑制@onReceive回调吗?当我使用ChannelRead()时,我似乎无法找到应作为输入套接字的原因。我在哪里找到适当的套接字号?

您的演示文件工作正常,但是当我用Int8(1:10)这样的某些数据替换EchoservertestBuffer()时,似乎是一个异常“线程(SocketManager4):'SocketManager:运行:ReadSizeError(1566465888)' - >您应该关闭此频道“
尽管onReceive函数接收所有10个字节。你能解释一下吗?
谢谢。

裘德柯林斯

谢谢你的5颗星,但我认为这不是那个水平,但我很高兴你喜欢它。我慢慢添加了更多功能并重组代码。我希望在太久之前更新它。它仍然需要记录。

布莱恩

裘德柯林斯

ren,您需要编译java 6 sdk而不是Java 7。
“Java 1.6.0_17-B04”在外部已知为“6U17”,其中“U”代表更新。
6u17之后的任何Java 6 sdk版本可能都可以工作。
最新的Java 6 SDK版本是6U34。
http://www.oracle.com/technetwork/java/javase/downloads/index.html.

javase代表“Java标准版”。

你是正确的,serverBind()是一个m文件,上次我更新这个项目时被遗漏了。我会在明天之前上传。

poorren.

嗨jude,
我真的很喜欢你的代码和你的方法。但是,我是C / C ++的人,不熟悉Java。

我的PC (Windows 7 64位)上的Java库版本如下。
Java SE开发工具包7更新6(64位)1.7.0.60
Java 7更新6(64bit)7.0.60
Java 7更新6 7.0.60

Matlab版本信息如下。

>>版本

ans =.

7.13.0.564(R2011B)

>>版本-Java.

ans =.

Java 1.6.0_17-B04带Sun Microsystems Inc. Java Hotspot(TM)64位服务器VM混合模式

以前,我安装了旧版JRE。我卸载了所有这些,重新安装JRE / JDK如上所述。
使用的IDEI是tide.jar。(http://sourceforge.net/projects/tide/

不幸的是,使用自我编译的库,我持久地得到了“警告:尝试加载com / jude / nio / echoserver类的Java异常:”。

作为运气的尝试,我直接使用您在包中提供的库。一切都在运作!!
我已经能运行总管了。M,并试图连接到仪器作进一步的实验。

还有一个问题是Demoserver.m。那是未完成的工作吗?
我试图运行该脚本,也无法找到serverbind(hostname,portnum),即使我导入库。

无论如何,感谢您的代码和出色的工作!希望看到更完美的matsock!

美好的一天!
杰夫

裘德柯林斯

ren,你的方法看起来是正确的。
http://www.java.net/node/664117

确保您所编译的jdk与您正在使用的Matlab版本兼容。

你在运行哪个版本的Matlab ?
你正在使用像netbeans或eclipse这样的IDE吗?

poorren.

你好,裘德,
我在Windows7上编译Java源。然后,试图运行main..并发现以下例外。我不是java而不是mararal。在谷歌后这个例外后,我发现这可能导致JDK和JRE之间的版本不匹配。我在我的机器上重新安装JRE和JDK。例外仍然存在。你能提供更多帮助吗?谢谢前进!

#######################
12 echoServer = echoServer (echoPorts);%默认端口为10059
警告:一个Java异常发生试图加载/jude/nio/ echoserver类:
Java异常发生:
java.lang.un金宝appsupportedclassversionError:COM / JUDE / NIO / ECHOSERVER:不受支持的主要.Minor版本51.0

在java.lang.classloader.defineclass1(本机方法)

在java.lang.classloader.defineclass(未知来源)

在java.security.secureclassloader.defineclass(未知来源)

在java.net.urlclassloader.defineclass(未知来源)

java.net.urlclassloader.access $ 000(未知来源)

在java.net.urlclassloader $ 1.Run(未知来源)

在java.security.accesscontroller.doprivileged(本机方法)

在java.net.urlclassloader.findclass(未知来源)

在java.lang.classloader.LoadClass(未知来源)

在sun.misc.launcher $ appclassloader.loadClass(未知来源)

在java.lang.classloader.LoadClass(未知来源)

在java.lang.ClassLoader。loadClassInternal(未知来源)

. lang . class。forName0(本地方法)

. lang . class。forName(未知来源)

在com.mathworks.jmi.opaquejavainterface.findclass(OpaqueJavainterface.java:470)

裘德柯林斯

我应该在接下来的几天内提交更新版本,支持处理服务器套接字的处理op_accept回调,并包含一些其他增强功能。金宝app有人会下载这个让我知道它是如何适合你的?谢谢。

MATLAB版本兼容性
创建R2007a
与任何版本兼容
平台兼容性
窗户 苹果系统 Linux.

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!