Я только начинаю узнавать об отправке пакетов UDP, и у меня возникла проблема.Я написал клиент и сервер Java, которые легко взаимодействуют друг с другом, и сделал комбо-клиент клиент / сервер Python, но я не уверен, как отправить пакет UDP из Java и получить его в 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 обрабатывают пакеты, но я не уверен.
РЕДАКТИРОВАТЬ: просто для пояснения, номер порта передается через аргументы командной строки для обоих этихприложения.