簡體   English   中英

使用套接字將int從Java發送到C

[英]Sending an int from Java to C using sockets

我只是想知道如何使用套接字從Java應用程序向C應用程序發送int。 我有不同的C程序相互通信,並且Java應用程序從C應用程序檢索數據,但是我無法解決發送問題。

C應用程序充當數據庫,然后Java應用程序將用戶ID(4位數字)發送給C應用程序(如果存在),它將返回該記錄的詳細信息。

在Java中,我嘗試使用printWriter和DataOutputStream發送數據,printWriter產生奇怪的符號,DataOutputStream產生“ prof_agent.so”。

任何幫助將不勝感激,因為我目前不掌握套接字。

您可以使用DataOutputStream.writeInt 它已按合同以網絡字節順序寫入一個int。

C端,您可以調用recvread以填充4字節的緩沖區,然后可以使用ntohl (Network-TO-Host-Long)將剛剛讀取的值轉換為平台int表示形式。

您可以發送文本表示。 因此,數字123將作為3個字節“ 1”,“ 2”,“ 3”發送。

為時已晚,但是讓這個答案在這里。 使用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);
    }

C#代碼:

        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);
            }
        }

嘗試這個:

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
        }
    }
}

如果您可以多解釋一些問題,它將對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM