[英]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
端,您可以調用recv
或read
以填充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.