Отправка пакетов Java на сервер Python? - PullRequest
0 голосов
/ 14 апреля 2011

Я только начинаю узнавать об отправке пакетов 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 обрабатывают пакеты, но я не уверен.

РЕДАКТИРОВАТЬ: просто для пояснения, номер порта передается через аргументы командной строки для обоих этихприложения.

Ответы [ 3 ]

1 голос
/ 14 апреля 2011

Проблема должна быть в вашем коде, они должны быть в состоянии общаться: это хороший пример написания пары клиент-сервер в Java.

1 голос
/ 14 апреля 2011

Итак, для начала я нахожусь на Ubuntu 10.10.

Я зашел в / etc / hosts и похоже, что 127.0.0.1 был назначен localhost.localdomain, а 127.0.1.1 был назначен моемуимя машины.Итак, Python использовал адрес localhost, в то время как Java использовал адрес моего компьютера.Я изменил localhost на имя своей машины, и теперь все работает.

Спасибо всем за помощь!

0 голосов
/ 14 апреля 2011

В Java я вижу, где вы создаете пакет, но я не вижу, чтобы вы фактически помещали какие-либо данные в пакет, используя setData перед его отправкой.

...