使用套接字从Java向C发送int

使用套接字从Java向C发送int,java,c,sockets,integer,Java,C,Sockets,Integer,我只是想知道如何使用套接字将int从Java应用程序发送到C应用程序。我有不同的C程序相互通信,有Java应用程序从C应用程序中检索数据,但我无法解决发送问题 C应用程序充当数据库,Java应用程序然后向C应用程序发送一个用户id和一个4位数的数字,如果它存在,它将返回该记录的详细信息 在Java中,我尝试使用printWriter和DataOutputStream发送数据,printWriter生成奇怪的符号,DataOutputStream生成prof_agent.so 如果有任何帮助,我将

我只是想知道如何使用套接字将int从Java应用程序发送到C应用程序。我有不同的C程序相互通信,有Java应用程序从C应用程序中检索数据,但我无法解决发送问题

C应用程序充当数据库,Java应用程序然后向C应用程序发送一个用户id和一个4位数的数字,如果它存在,它将返回该记录的详细信息


在Java中,我尝试使用printWriter和DataOutputStream发送数据,printWriter生成奇怪的符号,DataOutputStream生成prof_agent.so


如果有任何帮助,我将不胜感激,因为我目前对套接字没有很好的掌握。

您可以发送文本表示。因此,数字123将作为3个字节“1”“2”“3”发送。

您可以使用。它按约定以网络字节顺序写入int

在C端,您可以调用recv或read来填充4字节的缓冲区,然后您可以使用ntohl Network来承载Long,将刚才读取的值转换为平台int表示形式。

尝试以下操作:

Socket s = ...;
DataOutputStream out = null;
try {
    out = new DataOutputStream( s.getOutputStream() );
    out.writeInt( 123456 );
} catch ( IOException e ) {
    // TODO Handle exception
} finally {
    if ( out != null ) {
        try {
            out.close();
        } catch ( IOException e ) {
            // TODO Handle exception
        }
    }
}

如果你能多解释一下你的问题是什么,那会有帮助的。

虽然有点晚了,但还是把这个答案放在这里吧。使用UDP套接字:

Java代码:

public void runJavaSocket() {
            System.out.println("Java Sockets Program has started."); int i=0;    
    try {
            DatagramSocket socket = new DatagramSocket();
            System.out.println("Sending the udp socket...");
            // Send the Message "HI"
            socket.send(toDatagram("HI",InetAddress.getByName("127.0.0.1"),3800));
            while (true)
            {
              System.out.println("Sending hi " + i);
              Thread.currentThread();
              Thread.sleep(1000);
              socket.send(toDatagram("HI " +             String.valueOf(i),InetAddress.getByName("127.0.0.1"),3800));
                    i++;
            }
        } 
    catch (Exception e) 
    {
         e.printStackTrace();
    }
}

public DatagramPacket toDatagram(
          String s, InetAddress destIA, int destPort) {
    // Deprecated in Java 1.1, but it works:
    byte[] buf = new byte[s.length() + 1];
    s.getBytes(0, s.length(), buf, 0);
    // The correct Java 1.1 approach, but it's
    // Broken (it truncates the String):
    // byte[] buf = s.getBytes();
    return new DatagramPacket(buf, buf.length, 
    destIA, destPort);
    }
        string returnData;
        byte[] receiveBytes;
        //ConsoleKeyInfo cki = new ConsoleKeyInfo();

        using (UdpClient udpClient = new UdpClient(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3800)))
        {
            IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3800);
            while (true)
            {
                receiveBytes = udpClient.Receive(ref remoteIpEndPoint);
                returnData = Encoding.ASCII.GetString(receiveBytes);
                Console.WriteLine(returnData);
            }
        }
C代码:

public void runJavaSocket() {
            System.out.println("Java Sockets Program has started."); int i=0;    
    try {
            DatagramSocket socket = new DatagramSocket();
            System.out.println("Sending the udp socket...");
            // Send the Message "HI"
            socket.send(toDatagram("HI",InetAddress.getByName("127.0.0.1"),3800));
            while (true)
            {
              System.out.println("Sending hi " + i);
              Thread.currentThread();
              Thread.sleep(1000);
              socket.send(toDatagram("HI " +             String.valueOf(i),InetAddress.getByName("127.0.0.1"),3800));
                    i++;
            }
        } 
    catch (Exception e) 
    {
         e.printStackTrace();
    }
}

public DatagramPacket toDatagram(
          String s, InetAddress destIA, int destPort) {
    // Deprecated in Java 1.1, but it works:
    byte[] buf = new byte[s.length() + 1];
    s.getBytes(0, s.length(), buf, 0);
    // The correct Java 1.1 approach, but it's
    // Broken (it truncates the String):
    // byte[] buf = s.getBytes();
    return new DatagramPacket(buf, buf.length, 
    destIA, destPort);
    }
        string returnData;
        byte[] receiveBytes;
        //ConsoleKeyInfo cki = new ConsoleKeyInfo();

        using (UdpClient udpClient = new UdpClient(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3800)))
        {
            IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3800);
            while (true)
            {
                receiveBytes = udpClient.Receive(ref remoteIpEndPoint);
                returnData = Encoding.ASCII.GetString(receiveBytes);
                Console.WriteLine(returnData);
            }
        }

DataOutputStream生成prof_agent.so。。。我不这么认为。显示一些code.out.write+123456;-但这是对网络的浪费,请通过Bytes努力做到这一点。我经常在out.writeInt上遇到IOException。你知道这可能是什么吗?因为根据我的C程序,有一个连接。你能粘贴完整的堆栈跟踪吗?