繁体   English   中英

将Java数据包发送到Python服务器?

[英]Sending Java Packets to Python Server?

我刚刚开始学习发送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处理数据包的方式有些不同,但我不确定。

编辑:只是为了澄清,端口号是通过这两个应用程序的命令行参数传递的。

问题必须在你的代码中,他们应该能够进行通信: 是在java中编写客户端服务器对的一个很好的例子。

所以,首先,我在Ubuntu 10.10上。

我进入/ etc / hosts,看起来127.0.0.1被分配给localhost.localdomain,而127.0.1.1被分配给我的机器名。 因此,Python使用的是localhost地址,而Java则使用我的机器名称地址。 我将localhost更改为我的机器名称,现在一切正常。

谢谢大家帮忙!

在Java中,我看到了创建数据包的位置,但在发送数据包之前,我没有看到您实际使用setData将任何数据放入数据包。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM