使用Mathematica连接到UDP数据流

Sjo*_*ies 8 udp wolfram-mathematica

我的iPhone上有一个名为iSeismometer的应用程序,可以读取iPhone的加速度计,并充当通过UDP传输此数据的服务器(我可以设置IP地址和端口号).问题是如何使用Mathematica读取此数据流?显然,Dreeves12年前一直在研究这个问题,所以我想在此期间肯定会发生一些事情.

更新
到目前为止我得到了两个很好的答案 一个来自WReach,一个来自Mark McClure.两者都使用JLink来获取数据.这似乎是一个很好的方法.但是,我想起了我在WII平衡板上所做的一些工作.使用一些免费程序(GlovePIE和PPJoy),我得到了这个蓝牙外设,它可以作为Windows的操纵杆出现,因此也可以作为Mathematica(via ControllerState).当然,蓝牙和UDP是完全不同的,但也可以使用同样的东西来工作吗?

Mar*_*ure 4

JLink 绝对是您的最佳选择。我更喜欢通过编译 Java 程序来将我的 Java 代码和 Mathematica 代码分开,然后从 Mathematica 调用该程序。我设置了一个 Notebook 和配套的 Java 程序,您可以在这里获取: http: //facstaff.unca.edu/mcmcclur/UDPFiles.tar.gz

这是基本的 Mathematica 代码:

Needs["JLink`"];
InstallJava[];
AddToClassPath[NotebookDirectory[]];
udpReader = JavaNew["myClient"];
i = 0;
While[True && i++ < 100,
  Print[udpReader@udpReadOne[10552]]]
Run Code Online (Sandbox Code Playgroud)

updReader 类由以下 Java 代码定义。

// A simple UDP client to read from iseismometer:
// http://www.iseismometer.com/
// You can run this from the command line via "java myClient"
// to check that your iseismometer setup is correct or you can
// call the the udpReadOne method from another program.

import java.io.*;
import java.net.*;
import java.util.*;

public class myClient {
    public static void main() throws IOException {
        DatagramSocket socket = new DatagramSocket(10552);
        byte[] buffer = new byte[500];
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
        while(true) {
            socket.receive(packet);
            String received = new String(packet.getData(), 0, packet.getLength());
            System.out.println(received);
        }
    }

    public static String udpReadOne(int port) throws IOException {
        DatagramSocket socket = new DatagramSocket(port);
        byte[] buffer = new byte[100];
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
        socket.receive(packet);
        String received = new String(packet.getData(), 0, packet.getLength());
        socket.close();
        return received;
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,您可以使用 myClient 类的 main 方法来检查您的设置是否在没有 Mathematica 的情况下正常工作,从本质上解决了一个潜在问题。