posts - 241,  comments - 116,  trackbacks - 0

          先介紹兩個(gè)UDP相關(guān)的類

          DatagramSocket 這個(gè)是UDP套接字,一般服務(wù)器端可以綁定一個(gè)本機(jī)端口,而客戶端發(fā)送方則不需要。

          DatagramPacket 這個(gè)是數(shù)據(jù)報(bào)包,服務(wù)器端直接按緩存讀,客戶端則需要指定Ip地址和端口

          這次我們做個(gè)android手機(jī)端跟電腦端通信

          電腦端:
          import java.net.DatagramPacket;
          import java.net.DatagramSocket;
          import java.net.SocketException;


          public class UdpRecv {

              public static void main(String[] args) throws Exception{
                  
                  //綁定本機(jī)斷開
                  DatagramSocket ds = new DatagramSocket(8080);
                  
                  byte[] buf = new byte[1024];
                  DatagramPacket dp = new DatagramPacket(buf,buf.length);
                  
                  //接收數(shù)據(jù)包
                  ds.receive(dp);
                  
                  //取出數(shù)據(jù)報(bào)內(nèi)容
                  String str = new String(dp.getData(),0,dp.getLength());
                  
                  System.out.println(str);
                  
                  //打印發(fā)送方的地址
                  System.out.println("ip:"+dp.getAddress().getHostAddress()+"port:"+dp.getPort());
                  
                  ds.close();
              }
          }
          -----------------------------------------------------
          android相關(guān)內(nèi)容:
          -----------------------------------------------------
          手機(jī)端:
          package com.bvin.test.udp;

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

          import android.app.Activity;
          import android.content.Context;
          import android.net.wifi.WifiInfo;
          import android.net.wifi.WifiManager;
          import android.os.Bundle;
          import android.util.Log;
          import android.view.Menu;
          import android.view.MenuItem;
          import android.widget.EditText;

          public class MainActivity extends Activity {
              /** Called when the activity is first created. */
              EditText et ;
              @Override
              public void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                   et =  new EditText(this);
                  
                  setContentView(et);
                  
                  WifiManager wMan = (WifiManager)getSystemService(Context.WIFI_SERVICE);
                  if(!wMan.isWifiEnabled()){
                      wMan.setWifiEnabled(true);
                  }
                  WifiInfo wifiInfo = wMan.getConnectionInfo();
                  Log.e("ip", intToIp(wifiInfo.getIpAddress()));//本機(jī)ip(僅wifi環(huán)境)
              }

              //把獲取的整形轉(zhuǎn)換成字符型
              private String intToIp(int i) {         
                  
                  return (i & 0xFF ) + "." +         
                ((i >> 8 ) & 0xFF) + "." +         
                ((i >> 16 ) & 0xFF) + "." +         
                ( i >> 24 & 0xFF) ;   
             }
              
              @Override
              public boolean onCreateOptionsMenu(Menu menu) {
                  // TODO Auto-generated method stub
                  menu.add("發(fā)送");
                  return super.onCreateOptionsMenu(menu);
              }

              @Override
              public boolean onOptionsItemSelected(MenuItem item) {
                  // TODO Auto-generated method stub
                  if(item.getItemId()==0){
                      DatagramSocket ds;
                      try {
                          //套接字
                          ds = new DatagramSocket();
                          //發(fā)送內(nèi)容
                          String str = et.getText().toString();
                          //構(gòu)建數(shù)據(jù)報(bào)(內(nèi)容+地址)
                          DatagramPacket dp = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("192.168.0.102"),8080);
                          //把數(shù)據(jù)報(bào)發(fā)送出去
                          ds.send(dp);
                          //關(guān)閉套接字
                          ds.close();
                          
                      } catch (IOException e) {
                          // TODO Auto-generated catch block
                          e.printStackTrace();
                      }
                      
                  }
                  return super.onOptionsItemSelected(item);
                  
              }
              
              
          }
          首先運(yùn)行電腦接收端,在接收到發(fā)送方數(shù)據(jù)之前將會(huì)一直阻塞。而手機(jī)端會(huì)有個(gè)輸入框,有個(gè)發(fā)送菜單,將會(huì)把輸入框的內(nèi)容給發(fā)送到PC端,雖然UDP不算可靠,但是在局域網(wǎng)還是挺可靠。
          posted on 2013-02-07 13:44 墻頭草 閱讀(10017) 評(píng)論(4)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          人人游戲網(wǎng) 軟件開發(fā)網(wǎng) 貨運(yùn)專家
          主站蜘蛛池模板: 延边| 惠安县| 宜君县| 荣成市| 徐州市| 新河县| 新安县| 四川省| 甘泉县| 彝良县| 子洲县| 玛多县| 宁武县| 吉木萨尔县| 祁东县| 泰宁县| 庄河市| 乌拉特中旗| 陈巴尔虎旗| 齐齐哈尔市| 紫金县| 鄱阳县| 沁源县| 台州市| 光山县| 孝义市| 建水县| 新密市| 巩义市| 隆德县| 邛崃市| 齐齐哈尔市| 永平县| 黎城县| 拜泉县| 若尔盖县| 顺义区| 凌源市| 南安市| 正阳县| 安阳市|