posts - 241,  comments - 116,  trackbacks - 0

棒球比分大小怎么算 www.355548.live 先介紹兩個UDP相關的類

DatagramSocket 這個是UDP套接字,一般服務器端可以綁定一個本機端口,而客戶端發送方則不需要。

DatagramPacket 這個是數據報包,服務器端直接按緩存讀,客戶端則需要指定Ip地址和端口

這次我們做個android手機端跟電腦端通信

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


public class UdpRecv {

    public static void main(String[] args) throws Exception{
        
        //綁定本機斷開
        DatagramSocket ds = new DatagramSocket(8080);
        
        byte[] buf = new byte[1024];
        DatagramPacket dp = new DatagramPacket(buf,buf.length);
        
        //接收數據包
        ds.receive(dp);
        
        //取出數據報內容
        String str = new String(dp.getData(),0,dp.getLength());
        
        System.out.println(str);
        
        //打印發送方的地址
        System.out.println("ip:"+dp.getAddress().getHostAddress()+"port:"+dp.getPort());
        
        ds.close();
    }
}
-----------------------------------------------------
android相關內容:
-----------------------------------------------------
手機端:
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()));//本機ip(僅wifi環境)
    }

    //把獲取的整形轉換成字符型
    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("發送");
        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();
                //發送內容
                String str = et.getText().toString();
                //構建數據報(內容+地址)
                DatagramPacket dp = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("192.168.0.102"),8080);
                //把數據報發送出去
                ds.send(dp);
                //關閉套接字
                ds.close();
                
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
        return super.onOptionsItemSelected(item);
        
    }
    
    
}
首先運行電腦接收端,在接收到發送方數據之前將會一直阻塞。而手機端會有個輸入框,有個發送菜單,將會把輸入框的內容給發送到PC端,雖然UDP不算可靠,但是在局域網還是挺可靠。
posted on 2013-02-07 13:44 墻頭草 閱讀(9373) 評論(4)  編輯  收藏

只有注冊用戶登錄后才能發表評論。


網站導航:
 
人人游戲網 棒球比分大小怎么算 貨運專家
{ganrao} 幸运赛车前一 刮刮乐中大奖怎么兑换 捕鸟达人充值礼包 手机麻将 福彩开奖直播频道 湖南红中麻将打法 2020开奖记录历史结果 湖南闲来麻将苹果 浙江快乐彩12选5开奖 下载哈尔滨麻将 浙江快乐彩12选5规则 长沙麻将5块规则怎么算翻 30选5开奖结果查询结 东北麻将二八是什么意思 35选7超长版走势图 东北麻将打夹胡技巧