安卓UDP通信

功能:

实现了单次一发一收:

import java.net.*;
import java.io.*;

public class udpRecv
{
    /*
    * 创建UDP传输的接收端
    * 1.建立udp socket服务,因为是要接收数据,必须指明端口号
    * 2,创建数据包,用于存储接收到的数据。方便用数据包对象的方法处理数据
    * 3,使用socket服务的receive方法将接收的数据存储到数据包中
    * 4,通过数据包的方法解析数据包中的数据
    * 5,关闭资源

    *抛一个大异常:IOException
    */
    public static void main(String[] args) throws IOException{
        //1,创建udp socket服务
        DatagramSocket ds = new DatagramSocket(10000);

        //2,创建数据包
        byte[] buf =new byte[1024];
        DatagramPacket dp =new DatagramPacket(buf,buf.length);

        //3,使用接收的方法将数据包存储到数据包中
        ds.receive(dp);//阻塞式

        //4.通过数据包对象的方法,解析其中的数据
        String ip = dp.getAddress().getHostAddress();
        int port  = dp.getPort();
        String content = new String(dp.getData(),0,dp.getLength());
        System.out.println(ip+"::" +port+":"+content);
        /*回发给手机数据*/
        //首先获取端口和地址
        InetAddress addr = dp.getAddress();
        String sendStr = "Hello ! 我是服务器";
        byte[] sendBuf;
        sendBuf = sendStr.getBytes("utf-8");//必须转换utf8,否则安卓显示乱码
        DatagramPacket sendPacket 
            = new DatagramPacket(sendBuf , sendBuf.length , addr , port );

        ds.send(sendPacket);
        //5关闭资源
        ds.close();

        
        
    }
}
udpRecv.java

安卓客户端后台代码:

package com.simpleclientudp;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;



import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;


public class MainActivity extends Activity {
    
    EditText show;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    
    show = (EditText) findViewById(R.id.show);
    new Thread()
    {
        @Override
        public void run()
        {
            try
            {
                //1.udpsocket服务对象,使用DatagramSocket创建,可以指明本地IP和端口
                //当然也可以不指明,已测试成功
                //现在仅仅指明手机端口为8888
                DatagramSocket ds = new DatagramSocket(8888);

                //2.将要发送的数据封装到数据包中
                String str ="udp tranmsimit,i am mobilephone";
                byte[] buf =str.getBytes("utf-8");
                DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.108"),10000);

                //3.udp发送,使用socket服务将数据包发送出去
                ds.send(dp);
                /*接收数据*/
                byte[] recvBuf = new byte[100];
                DatagramPacket recvPacket
                    = new DatagramPacket(recvBuf , recvBuf.length);
                ds.receive(recvPacket);
                String recvStr = new String(recvPacket.getData() , 0 ,recvPacket.getLength());
                show.setText("收到: 	" + recvStr);
                //4.关闭连接
                ds.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }.start();
    
}


}

前台代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

    <EditText
        android:id="@+id/show"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:cursorVisible="false"
        android:editable="false"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="UDP客户端" />

</LinearLayout>
View Code

权限代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.simpleclientudp"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
View Code

效果:

原文地址:https://www.cnblogs.com/shuqingstudy/p/4963247.html