android UDP连接,没有接收任何数据 [英] android UDP connection, not receiving any data

查看:227
本文介绍了android UDP连接,没有接收任何数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我试图在Eclipse的PC仿真器和PC之间建立一个UDP连接。一个android手机

(或两个Android手机设备之间)。



我有一个路由器,手机通过路由器的WiFi网络连接到互联网。 PC在同一网络上(直接电缆路由器-PC连接)。我试图从服务器线程发送一些文本数据到客户端线程,但没有收到/发送。 :



服务器 java类(重新编辑,服务器从客户端接收msg。 p>

  public class server implements Runnable 
{
//服务器端口
public static final int SERVERPORT = 6000;

//运行服务器线程
public void run()
{
Log.d(redwing,服务器线程已启动。 ;
DatagramSocket serverSocket = null;

try
{
//打开服务器端口
serverSocket = new DatagramSocket(server.SERVERPORT);
[b] [b] [b] [b] [b] [b] [b] [b] )
{
if(renderer.gGL!= null)//忽略我,只是一个空指针检查器
{
//等待传入客户端的消息包
DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length);
serverSocket.receive(receivePacket);
renderer.recv = new String(receivePacket.getData());
Log.d(server,从客户端收到的数据包,ETA+ timing.getNow()++ renderer.recv); // timing getNow - just returns current system minute&第二。

//服务器正在向客户端回复一条消息。
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&第二。
}
}
//关闭套接字
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 ):

  Runnable 
{
public static final int CLIENTPORT = 5000;
//运行客户线程。
public void run()
{
Log.d(redwing,client thread started。
DatagramSocket clientSocket = null;

try
{
//获取本地地址
clientSocket = new DatagramSocket(server.SERVERPORT);
InetAddress IPAddress = InetAddress.getByName(192.168.0.100);

//显示IP&主机名。
Log.d(client,IP:+ IPAddress.getHostAddress()+Name:+ IPAddress.getHostName());
byte [] sendData = new byte [32];
byte [] receiveData = new byte [32];
//循环,直到client_finished变为False。
while(createclient.client_finished)
{
if(renderer.gGL!= null)//忽略我,只是一个空指针检查器
{
//发送一个消息到服务器
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());

//等待服务器数据包消息。
DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length);
clientSocket.receive(receivePacket);
renderer.recv = new String(receivePacket.getData());
Log.d(client,从服务器接收的数据包,ETA+ timing.getNow());
}
}
//关闭套接字
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。);
}
}

清单中启用权限:

 < 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模拟器上运行服务器, / p>

客户&服务器线程运行只是很好,但问题是,我不会得到任何数据之间交换。 客户端未收到任何邮件,且服务器未收到任何邮件。数据包被发送,但没有收到。



我做错了什么?



请帮助我。

提前谢谢。

解决方案

运行你的模拟器后,在命令提示符telnet localhost中输入redir add udp:5000:6000。连接端口号为5000的客户端,并使用端口号6000打开udp服务器。然后可以从udp服务器接收客户端消息。



查看详情

  clientSocket = new DatagramSocket(); 
InetAddress IPAddress = InetAddress.getByName(< pc ip>); //而不是localhost


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

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


Im a newbie in this so please escuse me if i ask dumb questions.

Im trying to make a UDP connection between Eclipse's PC Emulator & a android phone
(or between two android phone devices).

I have a router and the phone connects to the internet thru router's wifi network. The PC is on same network also (direct cable router-PC connection). Im trying to send some text data from Server thread to Client thread but nothing is received/sent. :(

The Server java class (RE-EDITED, Server receives msg. from 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.");
    }
}

and the Client java class (RE-EDITED, Client does not receive msg from Server) :

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.");
    }
}

the Permisions are enabled in the manifest:

<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"/>

I'm running the Server on the android PC Emulator, and the Client on my android Phone.

Both Client & Server threads run just fine but ... the problem is that i dont get any data exchanged between them. The client doesn't receive anyting and the server doesnt receive anything. The packets are sent but nothing received .

What im doing wrong ?

Please help me.
Thank you in advance.

解决方案

After running your emulator, type it in command prompt - "telnet localhost ", then type "redir add udp:5000:6000". Connect client with port number 5000 and open udp server with port number 6000. Then you can receive client message from udp server.

Take a look for details

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连接,没有接收任何数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆