如何使用UDP套接字在Android的?如何使用、UDP、Android

2023-09-05 08:02:53 作者:羽逸之光

我想使用UDP套接字在Android的,在这里我把我的字符串从Android模拟器,并接收通过电脑我的Java程序,但我的Java程序不会收到任何东西,虽然当我用Java程序的客户端和服务器(我做了两个不同的Java程序),它的工作。

这是我的Andr​​oid主要活动:

 公共类首先扩展活动{
按钮B;

@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);
    B =(按钮)findViewById(R.id.button1);
    b.setOnClickListener(新View.OnClickListener(){

        公共无效的onClick(视图v){
            // TODO自动生成方法存根
            线程t =新主题(新二());
            t.start();
        }
    });
 

下面是我的第二类机器人:

 公共类二实现Runnable {
第二()
{
    跑();
}
公共无效的run(){
    // TODO自动生成方法存根
    尝试 {

        字符串messageStr =你好Android的!;
        INT SERVER_PORT = 9876;
        DatagramSocket的S =新的DatagramSocket();
        InetAddress类本地= InetAddress.getByName(127.0.0.1);
        INT msg_length = messageStr.length();
        byte []的消息= messageStr.getBytes();
        DatagramPacket类P =新的DatagramPacket(消息,msg_length,地方,
                SERVER_PORT);
        s.send(对);
    }赶上(例外五){

    }
}
}
 
深入的理解UDP编程

这是在PC上我的Java code:

 公共静态无效的主要(字符串的args [])抛出异常
    {
            DatagramSocket类的ServerSocket =新的DatagramSocket(9876);
            byte []的receiveData =新的字节[1024];
            byte []的送出数据=新的字节[1024];
            而(真)
            {
                    DatagramPacket类receivePacket =新的DatagramPacket(receiveData,receiveData.length);
                    serverSocket.receive(receivePacket);
                    串句=新的String(receivePacket.getData(),0,receivePacket.getLength());
                    InetAddress类ip地址= receivePacket.getAddress();
                    INT端口= receivePacket.getPort();
                    的System.out.println(收到消息+句子++ ip地址++端口);
            }
     }
 

解决方案

在你的Andr​​oid仿真(和Android设备),127.0.0.1意味着Android的模拟机,而不是PC主机。您可以在10.0.2.2

I am trying to use UDP sockets in a android, here I send my string from android emulator and receive that by my Java program on PC, but my Java program does not receive anything, although when I used Java program as both client and server (I made two different Java programs) it worked.

This is my android main activity :

public class First extends Activity {
Button b;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    b = (Button) findViewById(R.id.button1);
    b.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            Thread t = new Thread(new Second());
            t.start();
        }
    });

Here is my second class in android :

    public class Second implements Runnable {
Second()
{
    run();
}
public void run() {
    // TODO Auto-generated method stub
    try {

        String messageStr = "Hello Android!";
        int server_port = 9876;
        DatagramSocket s = new DatagramSocket();
        InetAddress local = InetAddress.getByName("127.0.0.1");
        int msg_length = messageStr.length();
        byte[] message = messageStr.getBytes();
        DatagramPacket p = new DatagramPacket(message, msg_length, local,
                server_port);
        s.send(p);
    } catch (Exception e) {

    }
}
}

This is my Java code on PC:

    public static void main(String args[]) throws Exception
    {
            DatagramSocket serverSocket = new DatagramSocket(9876);
            byte[] receiveData = new byte[1024];
            byte[] sendData = new byte[1024];
            while(true)
            {
                    DatagramPacket receivePacket = new     DatagramPacket(receiveData,receiveData.length);
                    serverSocket.receive(receivePacket);
                    String sentence = new String(receivePacket.getData(),0,receivePacket.getLength());
                    InetAddress IPAddress = receivePacket.getAddress();
                    int port = receivePacket.getPort();
                    System.out.println("MESSAGE RECEIVED  "+sentence+"  "+IPAddress+"         "+port);
            }
     }

解决方案

On your Android emulation (and Android device), 127.0.0.1 means the Android emulation machine, not the host PC. You can access your host at 10.0.2.2