我剛開始學習發送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