当前位置: 首页 > 知识库问答 >
问题:

将字节数组从java程序发送到c

方韬
2023-03-14

我目前正在学习网络,需要一些帮助来找出通过UDP从Java程序向C程序发送字节数组的最简单方法。以前,我用java创建了一个非常简单的客户机和服务器程序,并且能够使用Java类DatagramSocket和DatagramPacket在两个Java客户机/服务器程序之间发送和接收数据包。

但是现在,我有一个网络仿真器,我需要通过它,它是用C编写的,所以我担心它无法识别DatagramSocket和DatagramPacket数据,因为它们是Java类。

如果我有用C语言编写的网络模拟器的主机名和监听UDP端口,我该如何用Java向它发送一个字节数组呢?

共有1个答案

曾实
2023-03-14

您担心Java类无法识别是错误的,因为当您编写UDP数据包时,您使用的是不同的API(UDP是一种网络协议)。您没有序列化Java对象

下面是一个工作示例,Java客户端将UDP数据包发送到PureData(即Java)服务器(从代码解析):

package codesounding;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/*
  Every instruction type triggers an UDP message, each on different ports:
            Variable declaration:   7001
            Start block ({):        7002
            End block (}):          7003
            break:                  7004
            continue:               7005
            do:                     7006
            for:                    7007
            if:                     7008
            return:                 7009
            throw:                  7010
            while:                  7011
 */
public class UDPProcessor extends SilentProcessor {
    private static final String TARGET = "target"; //target host name
    private final DatagramPacket packetVar;
    private final DatagramPacket packetStart;
    private final DatagramPacket packetEnd;
    private final DatagramPacket packetBreak;
    private final DatagramPacket packetContinue;
    private final DatagramPacket packetDo;
    private final DatagramPacket packetFor;
    private final DatagramPacket packetIf;
    private final DatagramPacket packetReturn;
    private final DatagramPacket packetThrow;
    private final DatagramPacket packetWhile;
    final DatagramSocket socket; 
    final byte[] signal = "1;\n".getBytes(); //this message will trigger both PureData and MaxMSP UDP receivers; see the example patches

    public UDPProcessor() {
        try {
            String target = "127.0.0.1";
            if (System.getProperty(TARGET) != null  && !System.getProperty(TARGET).equals("")) {
                target = System.getProperty(TARGET);
            }
            System.out.println("Sending to "+target+"...");
            socket = new DatagramSocket();
            InetAddress address = InetAddress.getByName(target);

            packetVar = new DatagramPacket(signal, signal.length, address, 7001);
            packetStart = new DatagramPacket(signal, signal.length, address, 7002);
            packetEnd = new DatagramPacket(signal, signal.length, address, 7003);
            packetBreak = new DatagramPacket(signal, signal.length, address, 7004);
            packetContinue = new DatagramPacket(signal, signal.length, address, 7005);
            packetDo = new DatagramPacket(signal, signal.length, address, 7006);
            packetFor = new DatagramPacket(signal, signal.length, address, 7007);
            packetIf = new DatagramPacket(signal, signal.length, address, 7008);
            packetReturn = new DatagramPacket(signal, signal.length, address, 7009);
            packetThrow = new DatagramPacket(signal, signal.length, address, 7010);
            packetWhile = new DatagramPacket(signal, signal.length, address, 7011);

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private synchronized void send(DatagramPacket packet) {
        try {
            socket.send(packet);
        } catch (IOException e) {
            e.printStackTrace();
            //skipping 
        }
    }

    public void getVarDeclaration() {
        send(packetVar);
    }

    public void getStartBlock() {
        send(packetStart);
    }

    public void getEndBlock() {
        send(packetEnd);
    }

    public void getIfStatement() {
        send(packetIf);
    }

    public void getForStatement() {
        send(packetFor);
    }

    public void getDoStatement() {
        send(packetDo);
    }

    public void getWhileStatement() {
        send(packetWhile);
    }

    public void getReturnStatement() {
        send(packetReturn);
    }

    public void getBreakStatement() {
        send(packetBreak);
    }

    public void getContinueStatement() {
        send(packetContinue);
    }

    public void getThrowStatement() {
        send(packetThrow);
    }

}
 类似资料:
  • 您好,我需要将以下内容写入我的BLE设备,它实际上使设备能够发送回数据或通知值。但是,在多次尝试和更改要发送的数据类型后,实际上是这样的。 我无法启用该设备。我知道我需要使用字节数组,但我不知道如何将这些添加到字节数组中 它根本不起作用。

  • 问题内容: 我的jphp.php文件包含以下内容: 并且我的javascript文件包含以下内容: 我已经用php编码了数据数据..现在我想将这两个数据数组发送到javascript …我不知道要使用的正确命令。我对谷歌搜索感到困惑。 请帮忙 。 问题答案: 使用jQuery的简单特定示例: JavaScript页面: 在您的php中:

  • 问题内容: 我试图理解一个到字符串,一个的字符串表示形式到转换…我将我的转换成一个要发送的字符串,然后我希望我的Web服务(用python编写)将数据直接回显给客户端。 当我从Java应用程序发送数据时… 字节发送.. 发送(这是Arrays.toString()的结果,它应该是我的字节数据的字符串表示形式,该数据将通过电线发送): 在python端,python服务器将字符串返回给调用方(我可以

  • 我试图通过套接字将protobuf从C++应用程序发送到Java应用程序。我正在使用一个简单的套接字在muc++程序发送protobuf。在通过网络发送之前,我已经将其序列化到char缓冲区。在我的Java(服务器)程序中,我使用ServerSocket来接收数据。 我有麻烦反序列化的原Buf在Java那边。它一直给我错误: 解析协议消息时,输入在字段中间意外结束。这可能意味着输入被截断,或者嵌入

  • 我需要通过Java socket发送一个文本消息到服务器,然后发送一个字节数组,然后是一个字符串等等。到目前为止,我所开发的内容还在工作,但客户端只读取发送的第一个字符串。 从服务器端:我使用发送字节数组,使用发送字符串。 问题是客户机和服务器不同步,我的意思是服务器发送字符串然后字节数组然后字符串,而不等待客户机消耗每个需要的字节。 我的意思是情况不是这样的:

  • 问题内容: 我正在尝试通过套接字将数据从node.js发送到Java。我四处搜寻,但没有什么真正有用的。我习惯使用socket.io,但是在这种情况下,它似乎并不适合于此。似乎所有用于node.js的套接字扩展都不真正适合发送消息,而是听消息并回答某些问题。 我的Java应用程序基本上应该从node.js接收一些工作,完成工作并将一些结果发送回node.js。不,该工作无法在node.js上完成,