机器人UDP连接,没有接收到任何数据(android UDP connection, not rec

2019-07-29 00:40发布

我是一个新手在此,请escuse我,如果我问愚蠢的问题。

我试着让Eclipse的PC仿真器和一款Android手机之间的UDP连接
(或两个机器人电话设备之间)。

我有一个路由器和手机连接到互联网通路由器的WiFi网络。 PC是相同的网络也(直接电缆路由器,PC连接)。 我试着从服务器线程发送一些文字数据,客户端线程,但没有被接收/发送。 :(

服务器 Java类(RE-编辑,服务器接收来自MSG客户端。):

public class server implements Runnable 
{
    // the Server's Port
    public static final int SERVERPORT  = 6000;

    // running Server thread.
    public void run() 
    {
        Log.d("redwing","server thread started.");
        DatagramSocket serverSocket = null;

        try
        {
            // Open Server Port
            serverSocket = new DatagramSocket(server.SERVERPORT);
            byte[] receiveData  = new byte[32];
            byte[] sendData     = new byte[32];
            // loop until "server_finished"  becomes False.
            while(createserver.server_finished)
            {
                if(renderer.gGL!=null)  // ignore me, just a null pointer checker
                {
                    // waiting for the incoming client's message packet
                    DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                    serverSocket.receive(receivePacket);
                    renderer.recv = new String(receivePacket.getData());
                    Log.d("server","packet received from client, ETA " + timing.getNow() + " " + renderer.recv); // timing getNow - just returns current system minute & second.

                    // server is replying to the client back with a message.
                    InetAddress IPAddress = receivePacket.getAddress();
                    int port = receivePacket.getPort();

                    sendData = new String("server msg").getBytes();
                    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
                    serverSocket.send(sendPacket);
                    renderer.sent = new String(sendData, 0, sendData.length);
                    Log.d("server","packet sent to client, ETA " + timing.getNow() + " " + renderer.sent);     // timing getNow - just returns current system minute & second.
                }
            }
            // close the socket
            if(serverSocket!=null) serverSocket.close();
            serverSocket = null;
        }
        catch (Exception e) 
        {
            Log.e("server", "Error", e);
            if(serverSocket!=null) serverSocket.close();
            serverSocket = null;
        }
        finally 
        {
            if(serverSocket!=null) serverSocket.close();
            serverSocket = null;
        }
        Log.d("redwing","server thread terminated.");
    }
}

客户端的Java类( 重新编辑,客户端不接收来自服务器MSG):

public class client implements Runnable 
{
    public static final int CLIENTPORT  = 5000;
    // running Client thread.
    public void run() 
    {
        Log.d("redwing","client thread started.");
        DatagramSocket clientSocket = null;

        try
        {
            // getting local address 
            clientSocket = new DatagramSocket(server.SERVERPORT);
            InetAddress IPAddress = InetAddress.getByName("192.168.0.100");  

            // displaying IP & hostname.
            Log.d("client", "IP: " + IPAddress.getHostAddress() + " Name: " + IPAddress.getHostName());
            byte[] sendData     = new byte[32];
            byte[] receiveData  = new byte[32];
            // Loop until client_finished becomes False.
            while(createclient.client_finished)
            {
                if(renderer.gGL!=null)  // ignore me, just a null pointer checker
                {
                    // sending a message to the server
                    sendData = timing.getNow().getBytes();
                    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, client.CLIENTPORT);
                    clientSocket.send(sendPacket);
                    renderer.sent = new String(sendData,0,sendData.length);;
                    Log.d("client","packet sent to server, ETA " + timing.getNow());  

                    // waiting for the server packet message.
                    DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                    clientSocket.receive(receivePacket);
                    renderer.recv = new String(receivePacket.getData());
                    Log.d("client","packet received from server, ETA " + timing.getNow());
                }
            }
            // close the socket
            if(clientSocket!=null) clientSocket.close();
            clientSocket = null;
        }
        catch (Exception e) 
        {
            Log.e("client", "Error", e);
            if(clientSocket!=null) clientSocket.close();
            clientSocket = null;
        }
        finally 
        {
            if(clientSocket!=null) clientSocket.close();
            clientSocket = null;
        } 
        Log.d("redwing","client thread terminated.");
    }
}

在Permisions在清单中启用:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<user-permission android:name="android.permission.NETWORK" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

我跑在我的Android手机上Android的PC模拟器的服务器和客户端。

这两个客户端和服务器线程中运行得很好,但...问题是,我不明白它们之间的任何数据交换。 该客户端没有收到点儿和犯规收到任何服务器 。 的包被发送,但没有得到任何。

做什么我错了?

请帮我。
先感谢您。

Answer 1:

运行你的仿真器后,在命令提示符处键入它 - “远程登录本地主机”,然后键入“REDIR添加UDP:5000:6000”。 连接客户端的端口号5000和端口号为6000打开UDP服务器,则可以从UDP服务器收到客户端消息。

看看详细内容

clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("<pc ip>"); // instead of "localhost"


public static final String SERVERIP = "127.0.0.1"; // 'Within' the emulator!  
public static final int SERVERPORT = 6000;   

/* Retrieve the ServerName */  
InetAddress serverAddr = InetAddress.getByName(SERVERIP);  
DatagramSocket socket = new DatagramSocket(SERVERPORT, serverAddr);  


文章来源: android UDP connection, not receiving any data