【发布时间】:2011-04-14 16:15:11
【问题描述】:
我刚刚开始学习发送 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”发送回 Java 客户端,并让客户端打印字符串。对我来说发生的是客户端发送数据包,而服务器在sock.recvfrom(256) 处等待并且永远不会收到数据包(或者它看起来就是这样)。
有什么想法吗?我猜 Java 和 Python 处理数据包的方式有些不同,但我不确定。
编辑:为了澄清起见,端口号是通过这两个应用程序的命令行参数传入的。
【问题讨论】:
-
gethostname()返回什么(在交互式解释器上尝试)。您可能正在绑定外部接口,而不是localhost == 127.1,因为您似乎打算在上述 sn-ps 中执行此操作。 -
它返回我机器的名称。