Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有Java客户端和Python服务器的数据报套接字_Java_Android_Python_Udp_Datagram - Fatal编程技术网

带有Java客户端和Python服务器的数据报套接字

带有Java客户端和Python服务器的数据报套接字,java,android,python,udp,datagram,Java,Android,Python,Udp,Datagram,我正在尝试通过数据报套接字与两台机器通信,但我想我遗漏了一些东西。。。 机器A运行一个Android应用程序客户端 机器B是用Python编写的服务器 我可以毫无问题地从a向B发送消息,但a从未从B获得答案,代码如下: 客户端Java: InetAddress serverAddr = InetAddress.getByName("10.0.0.10"); DatagramSocket socket = new DatagramSocket(); byte[] bufSent = "regist

我正在尝试通过数据报套接字与两台机器通信,但我想我遗漏了一些东西。。。 机器A运行一个Android应用程序客户端 机器B是用Python编写的服务器

我可以毫无问题地从a向B发送消息,但a从未从B获得答案,代码如下:

客户端Java:

InetAddress serverAddr = InetAddress.getByName("10.0.0.10");
DatagramSocket socket = new DatagramSocket();
byte[] bufSent = "register".getBytes();
DatagramPacket dpSent = new DatagramPacket(bufSent,bufSent.length, serverAddr, 8088);
socket.send(dpSent);
byte[] bufRecv = new byte[1024];
DatagramPacket dpReceive = new DatagramPacket(bufRecv, bufRecv.length);
socket.receive(dpReceive);
String serverMessage = new String(dpReceive.getData(), 0, dpReceive.getLength());
Log.v(LOGTAG, "Received " + serverMessage);
服务器Python:

import socket
UDP_IP_DEST = "10.0.0.11"
UDP_IP = "10.0.0.10"
UDP_PORT = 8088

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
    if data:
        print "received message:", data
        sock.sendto("I got the message", (UDP_IP_DEST, UDP_PORT))
有人知道错误在哪里吗?关键是,我已经尝试将答案发送到另一台机器而不是移动设备,它工作正常


非常感谢。

我在接收方面也遇到了类似的问题,下面是我们在应用程序中使用的一些代码,用于使用您的值修改数据报,您可以看到我们在套接字设置中做了一些不同的事情。mSocket只是一个私有DatagramSocket成员变量。试试看。我认为您可能需要绑定,并可能设置重用地址标志

try
{
    mSocket = new DatagramSocket(null);
    mSocket.setReuseAddress(true);
    mSocket.setBroadcast(false);
    mSocket.bind(new InetSocketAddress(8088));
    //Set a 1.5 second timeout for the coming receive calls
    mSocket.setSoTimeout(1500);

    String data = "myData";
    DatagramPacket udpPacket = new DatagramPacket(data.getBytes(), data.length(), InetAddress.getByName("10.0.0.10"), 8088);
    mSocket.send(udpPacket);

    byte[] buf = new byte[1024];
    DatagramPacket recvPacket = new DatagramPacket(buf, buf.length);
    mSocket.receive(recvPacket);

    String response = new String(recvPacket.getData());
} 
catch (SocketException e)
{
    e.printStackTrace();
}
catch (UnknownHostException e)
{
    e.printStackTrace();
}
catch (IOException e)
{
    e.printStackTrace();
}