簡體   English   中英

android UDP連接,未接收任何數據

[英]android UDP connection, not receiving any data

我是新手,所以如果我問一個愚蠢的問題,請避開。

我正在嘗試在Eclipse的PC仿真器和Android手機之間建立UDP連接
(或兩個Android手機設備之間)。

我有一個路由器 ,電話通過路由器的wifi網絡連接到Internet。 PC也位於同一網絡上(直接電纜路由器與PC連接)。 我試圖從服務器線程向客戶端線程發送一些文本數據,但沒有接收/發送任何內容。 :(

Server java類(重新編輯,Server從Client接收消息 ):

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類(重新編輯,客戶端未從Server接收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 PC模擬器上運行服務器,在android手機上運行客戶端。

客戶端和服務器線程都可以正常運行,但是...問題是我沒有在它們之間交換任何數據。 客戶端不接收任何內容,服務器不接收任何內容 數據包已發送,但沒有收到。

我做錯了什么?

請幫我。
先感謝您。

運行模擬器后,在命令提示符下鍵入它-“ telnet localhost”,然后鍵入“ redir add 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);  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM