我刚开始学习发送UDP数据包,并且遇到问题。我写了一个Java客户端和服务器,它们可以很容易地相互通信,并且我已经完成了一个Python客户端/服务器组合,但我不知道如何从Java发送一个UDP数据包并用Python接收它。下面是我对Java客户端:发送Java包到Python服务器?
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',因为你打算在上面的代码片段中做这件事。 – Santa 2011-04-14 16:45:33
它返回我的机器的名称。 – 2011-04-14 16:47:23