2011-04-14 70 views
0

我刚开始学习发送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如何处理数据包有一些区别,但我不确定。

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

+0

什么'的gethostname()'回报(试试交互式解释)。你可能会绑定在外部接口上,而不是'localhost == 127.1',因为你打算在上面的代码片段中做这件事。 – Santa 2011-04-14 16:45:33

+0

它返回我的机器的名称。 – 2011-04-14 16:47:23

回答

1

因此,要启动,我在Ubuntu 10.10。

我走进了/ etc/hosts文件,它看起来像127.0.0.1被分配到称作localhost.localdomain,而127.0.1.1被分配到我的机器的名字。所以,Python使用本地主机地址,而Java使用我的机器名称地址。我将localhost更改为我的机器名称,现在一切正常。

谢谢大家试图帮助!

0

在Java中,我看到你创建的包,但我没有看到你实际上是把任何数据到发送之前使用setData包。

+0

刚试过设置数据,没有修复它。但是,我想我不必在客户端数据包中设置数据,因为它实际上比发送信息要求更多。 – 2011-04-14 16:42:06

1

的问题一定是你的代码中,它们应该能够传达:this 是用Java编写的客户机服务器对的一个很好的例子。

+0

谢谢,但我已经按照该教程。我按照这样写了一个客户端服务器对,它工作正常。但是,一旦我开始使用Python服务器,它不再工作。 – 2011-04-14 16:41:29

+0

也许尝试指定它正在监听的端口会有帮助,你确定你的客户端和服务器正在监听同一个端口吗? – 2011-04-14 17:13:42

+0

另外,让客户端和服务器的代码都运行在自己单独的线程守护进程中(这样当程序完成时它们就会死掉)可能会很有用。此外,它看起来不像你的服务器正在循环运行(即。(;;)),这可能是一个问题。运行时,服务器是否打印了任何内容? – 2011-04-14 17:20:10

相关问题