安卓下UDP通信比较简单,流程如下

发送方:

1.  创建DatagramSocket对象:

  DatagramSocket dsocket;

2.  创建 InetAddress , 相当于是地址

InetAddress serverAddress; 

3.  这是随意发送一个数据

String tosend;

4.  转为byte类型

byte data[] = tosend.getBytes();

5.  创建DatagramPacket 对象

DatagramPacket outgoing = new DatagramPacket (data , data.length , serverAddress, port);

6.  调用DatagramSocket对象的send方法 发送数据  

dsocket . send(outgoing );

接收方:

1.  创建一个DatagramSocket对象,并指定监听的端口号

DatagramSocket dsocket = new DatagramSocket(port);

2. 创建一个byte数组用于接收

byte data[] = new byte[1024];

3. 创建一个空的DatagramPackage对象

 DatagramPacket incoming = new DatagramPacket (data , data.length);

4. 使用receive接收数据,同时这也是一个阻塞的方法

dsocket.receive(incoming ); 

5. 得到发送过来的数据

new String(incoming .getData() , incoming .getOffset() , incoming .getLength());

 

源码如下:

 
package com.example.testudp;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.Socket;import java.net.SocketException;import java.net.UnknownHostException;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.os.StrictMode;import android.app.Activity;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class MainActivity extends Activity {static TextView show;EditText input;Button send;/**调试信息标签*/String me="MainActivity";/**数据流*/DatagramSocket dsocket;/**接收的数据*/byte data[] = new byte[1024];/**接收的数据包*/DatagramPacket incoming;/**发送的数据包*/DatagramPacket outgoing;/**设置发送IP(host)*/InetAddress serverAddress ;//= InetAddress.getByName("255.255.255.255");/**接收到的消息*/static String message;/**发送的消息*/String tosend;/**发送目的IP*/String ip2go="255.255.255.255";/**监听的端口*/int port=2001;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);show=(TextView)findViewById(R.id.info);input=(EditText)findViewById(R.id.input);send=(Button)findViewById(R.id.send);show.setText(""); try {         dsocket = new DatagramSocket(port);         } catch (SocketException e) {         // TODO Auto-generated catch block         e.printStackTrace();         Log.e(me,"创建连接失败");         }         try {         serverAddress = InetAddress.getByName(ip2go);         } catch (UnknownHostException e) {         // TODO Auto-generated catch block         e.printStackTrace();         Log.e(me,"设置发送端失败");         }incoming=new DatagramPacket(data, data.length);send.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubtosend=input.getText().toString();show.setText(show.getText()+"ME:"+tosend+"\n");byte[] senddata=tosend.getBytes();outgoing=new DatagramPacket(senddata, senddata.length,serverAddress,port);try {//感谢如下网页提供帮助//http://dev.wo.com.cn/docportal/doc_queryMdocDetail.action?mdoc.docindex=6695#StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());//以上为辅助代码  dsocket.send(outgoing);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();Log.e(me,"发送失败");}}});//mHandlernew Thread(new Runnable(){             @Override             public void run() {                        Log.e(me,"start");            while(true){            try {   dsocket.receive(incoming);message=new String(incoming.getData() , incoming.getOffset() , incoming.getLength());if(message.equals(tosend)){Log.e(me,"this is what you send -> "+message);}else{Log.e(me,"get="+message);mHandler.obtainMessage(FRESH_UI).sendToTarget();}            } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();Log.e(me,"接收失败");}//catch            }//while             }//run         }).start();//new Thread(new Runnable(){  }//onCreatestatic final  int FRESH_UI=1990;private static Handler mHandler = new Handler(){     @Override    public void handleMessage(Message msg)    {    switch(msg.what)    {    case FRESH_UI:    show.setText(show.getText()+"GET:"+message+"\n");    break;    default:    break;    }//switch    }//handler};}
上面的线程只是用来接收,不喜欢可以换成Handler。

布局文件就按键、edittext、textview各一个。

manifest里添加网络相关的权限即可。

废话一下,关于目的IP,四个255是广播,所有人都能收到这个消息

更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android(安卓)3.0系统上 解密GMail动画
  5. android中ContactsContract获取联系人的方法
  6. Android查看数据库工具sqlitemanager
  7. Android(安卓)SharedPreferences
  8. Android之WebView缓存应用
  9. android 3D 游戏实现之综合实例(初步)

随机推荐

  1. Android:使用Intents进行共享(Share With I
  2. android之Gallery
  3. Android相关网络资源整理
  4. android 连接CMWAP
  5. android之弹出气泡PopupWindow
  6. android 关于再按一次退出程序效果
  7. MediaScannerReceiver
  8. android proguard 错误处理
  9. Android: Launch the HOME screen
  10. Android(安卓)超级水平仪 金属红色仪表风