使用套接字从Java向C发送int
我只是想知道如何使用套接字将int从Java应用程序发送到C应用程序。我有不同的C程序相互通信,有Java应用程序从C应用程序中检索数据,但我无法解决发送问题 C应用程序充当数据库,Java应用程序然后向C应用程序发送一个用户id和一个4位数的数字,如果它存在,它将返回该记录的详细信息使用套接字从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 如果有任何帮助,我将
在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程序,有一个连接。你能粘贴完整的堆栈跟踪吗?