将Java数据包发送到Python服务器?
我刚开始学习如何发送UDP数据包,遇到了一些问题。我写了一个Java客户端和服务器,它们之间的通信很顺利;我也做了一个Python的客户端和服务器组合,但我不太确定如何从Java发送UDP数据包,并在Python中接收。下面是我写的Java客户端:
import java.io.*;
import java.net.*;
public class testclient {
public static void main(String[] args) throws IOException {
DatagramSocket socket = new DatagramSocket();
byte[] buf = new byte[256];
InetAddress address = InetAddress.getLocalHost();
DatagramPacket packet = new DatagramPacket(buf, buf.length, address, Integer.parseInt(args[0]));
System.out.println("Sending...");
socket.send(packet);
System.out.println("Receiving...");
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
String received = new String(packet.getData(), 0, packet.getLength());
System.out.println(received);
System.out.println("Done!");
socket.close();
}
}
还有Python服务器:
from sys import *
from socket import *
host = gethostname()
port = int(argv[1])
address = (host, port)
print "Binding..."
sock = socket(AF_INET, SOCK_DGRAM)
sock.bind(address)
print "Receiving..."
data, client = sock.recvfrom(256)
print "Sending to", client
sock.sendto("Hi", client)
print "Closing..."
sock.close()
print "Done!"
我想做的就是让Java客户端向Python服务器发送一个请求,然后让Python服务器回复“Hi”,最后客户端打印这个字符串。但是我遇到的问题是,客户端发送了数据包,而服务器在sock.recvfrom(256)
这行代码处一直在等待,却没有收到数据包(看起来是这样)。
有没有什么想法?我猜这可能是Java和Python处理数据包的方式有些不同,但我不太确定。
补充说明一下,端口号是通过命令行参数传递给这两个应用程序的。
3 个回答
0
在Java中,我看到你创建了一个数据包,但我没有看到你在发送之前,实际上用 setData
方法往这个数据包里放任何数据。
1
问题可能出在你的代码里,它们应该能够互相通信:这个链接是一个很好的例子,展示了如何用Java编写客户端和服务器的配对。
1
首先,我的系统是Ubuntu 10.10。
我查看了/etc/hosts文件,发现127.0.0.1这个地址被分配给了localhost.localdomain,而127.0.1.1则被分配给了我的机器名称。所以,Python程序使用的是localhost这个地址,而Java程序使用的是我的机器名称的地址。我把localhost改成了我的机器名称,现在一切都正常了。
谢谢大家的帮助!