我的应用程序无法从我的真实设备发送消息到模拟器!出了什么问题?是否需要更多设置?

时间:2014-11-09 19:41:06

标签: android client-server emulation

我是android新手。我已经开始使用一个简单的聊天应用程序了。我为UDP套接字编写了一个简短的代码,一个用于客户端,另一个用于服务器。现在我在连接android真实设备上安装了一些客户端应用程序的问题,以及在其上运行服务器应用程序的模拟器设备。 客户端应用程序是一个简单的代码,它必须设置IP以连接到模拟器,并且还有一个用于发送消息的EditText。(此时我设置了10.0.2.2或10.0.2.15。但我的应用程序无法从我的真实设备发送消息模拟器!出了什么问题?需要更多设置?) 服务器应用只有textView来获取和显示已收到的消息。 这是客户代码:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class ClienttextchatActivity extends Activity 
{
       private String udpMsg=null;
       Handler hand=new Handler();
       EditText edtSetIp=null , edtText=null;
       Button btnSetIp=null , btnSend=null;
      static String ip=null;
       static final String LOG_TAG = "UdpStream";    
       static final int PORT = 8888;     
       static final int BUF_SIZE=4096;
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        edtText=(EditText)findViewById(R.id.edtText);
        edtSetIp=(EditText)findViewById(R.id.edtSetIp);
        btnSetIp=(Button)findViewById(R.id.btnSetIp);
        btnSend=(Button)findViewById(R.id.btnSend);
        btnSetIp.setOnClickListener(new OnClickListener() 
        {
            public void onClick(View v) 
            {

                ip=edtSetIp.getText().toString(); 
            }
        });
        btnSend.setOnClickListener(new OnClickListener() 
        {
            public void onClick(View v) 
            {

                  Thread mythread=new Thread(new th1() );
                  mythread.start();


            }
        });

    }
   //#############################################


   public class th1 implements Runnable
    {           
        public void run() 
        {                   

            udpMsg  =edtText.getText().toString();  

            Log.d(LOG_TAG,udpMsg);
            DatagramSocket ds = null;

            try 
            {                               
                        ds = new DatagramSocket();
                        InetAddress serverAddr = InetAddress.getByName(ip);
                        Log.d(LOG_TAG,"address server address created.");
                        DatagramPacket dp;
                        dp = new DatagramPacket(udpMsg.getBytes(), udpMsg.length(), serverAddr, PORT);
                        ds.send(dp);        
                        Log.d(LOG_TAG,"packet send.");  
            } 
            catch (SocketException e) 
            {
                e.printStackTrace();
            }
            catch (UnknownHostException e) 
            {
                e.printStackTrace();
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            } 
            catch (Exception e) 
            {
                e.printStackTrace();
            } 
            finally 
            {
                if (ds != null) 
                {
                    ds.close();
                }
            }

        }//end run
    }//end class th
}

1 个答案:

答案 0 :(得分:0)

确保启动模拟器,然后在ADB shell中键入此命令,它将显示模拟器的IP地址。

adb shell
ifconfig etho

terminal