最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android網絡編程之UDP通信模型實例

 更新時間:2014年10月10日 13:21:26   投稿:junjie  
這篇文章主要介紹了Android網絡編程之UDP通信模型實例,本文給出了服務端代碼和客戶端代碼,需要的朋友可以參考下

什么是Android UDP?

UDP是User Datagram Protocol的簡稱,中文名是用戶數(shù)據(jù)包協(xié)議,是OSI參考模型中一種無連接的傳輸層協(xié)議,提供面向事務的簡單不可靠信息傳送服務。它是IETF RFC 768是UDP的正式規(guī)范。在網絡中它與TCP協(xié)議一樣用于處理數(shù)據(jù)包。在OSI模型中,在第四層-傳輸層,處于IP協(xié)議的上一層。UDP有不提供數(shù)據(jù)報分組、組裝和不能對數(shù)據(jù)包的排序的缺點,也就是說,當報文發(fā)送之后,是無法得知其是否安全完整到達的。UDP用來支持那些需要在計算機之間傳輸數(shù)據(jù)的網絡應用。包括網絡視頻會議系統(tǒng)在內的眾多的客戶/服務器模式的網絡應用都需要使用UDP協(xié)議。UDP協(xié)議從問世至今已經被使用了很多年,雖然其最初的光彩已經被一些類似協(xié)議所掩蓋,但是即使是在今天,UDP仍然不失為一項非常實用和可行的網絡傳輸層協(xié)議。

與所熟知的TCP(傳輸控制協(xié)議)協(xié)議一樣,UDP協(xié)議直接位于IP(網際協(xié)議)協(xié)議的頂層。根據(jù)OSI(開放系統(tǒng)互連)參考模型,UDP和TCP都屬于傳輸層協(xié)議。

UDP協(xié)議的主要作用是將網絡數(shù)據(jù)流量壓縮成數(shù)據(jù)報的形式。一個典型的數(shù)據(jù)報就是一個二進制數(shù)據(jù)的傳輸單位。每一個數(shù)據(jù)報的前8個字節(jié)用來包含報頭信息,剩余字節(jié)則用來包含具體的傳輸數(shù)據(jù)。

TCP和UDP在android中的使用和在Java里是完全一樣的。

服務端:

復制代碼 代碼如下:

package com.cheerchip.core;

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

import android.util.Log;

public class UDPServer implements Runnable {

 private static final int PORT = 6000;

 private byte[] msg = new byte[1024];

 private boolean life = true;

 public UDPServer() {
 }

 /**
  * @return the life
  */
 public boolean isLife() {
  return life;
 }

 /**
  * @param life
  *            the life to set
  */
 public void setLife(boolean life) {
  this.life = life;
 }

 @Override
 public void run() {
  DatagramSocket dSocket = null;
  DatagramPacket dPacket = new DatagramPacket(msg, msg.length);
  try {
   dSocket = new DatagramSocket(PORT);
   while (life) {
    try {
     dSocket.receive(dPacket);
     Log.i("msg sever received", new String(dPacket.getData()));
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  } catch (SocketException e) {
   e.printStackTrace();
  }
 }
}

客戶端:

復制代碼 代碼如下:

package com.cheerchip.core;

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

public class UDPClient {

 private static final int SERVER_PORT = 6000;

 private DatagramSocket dSocket = null;

 private String msg;

 /**
  * @param msg
  */
 public UDPClient(String msg) {
  super();
  this.msg = msg;
 }

 /**
  * 發(fā)送信息到服務器
  */
 public String send() {
  StringBuilder sb = new StringBuilder();
  InetAddress local = null;
  try {
   local = InetAddress.getByName("localhost"); // 本機測試
   sb.append("已找到服務器,連接中...").append("/n");
  } catch (UnknownHostException e) {
   sb.append("未找到服務器.").append("/n");
   e.printStackTrace();
  }
  try {
   dSocket = new DatagramSocket(); // 注意此處要先在配置文件里設置權限,否則會拋權限不足的異常
   sb.append("正在連接服務器...").append("/n");
  } catch (SocketException e) {
   e.printStackTrace();
   sb.append("服務器連接失敗.").append("/n");
  }
  int msg_len = msg == null ? 0 : msg.length();
  DatagramPacket dPacket = new DatagramPacket(msg.getBytes(), msg_len,
    local, SERVER_PORT);
  try {
   dSocket.send(dPacket);
   sb.append("消息發(fā)送成功!").append("/n");
  } catch (IOException e) {
   e.printStackTrace();
   sb.append("消息發(fā)送失敗.").append("/n");
  }
  dSocket.close();
  return sb.toString();
 }

}

主Activity:

復制代碼 代碼如下:

public class MainAct extends Activity {

 EditText msg_et = null;
 Button send_bt = null;
 TextView info_tv = null;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  msg_et = (EditText) findViewById(R.id.msg_et);
  send_bt = (Button) findViewById(R.id.send_bt);
  info_tv = (TextView) findViewById(R.id.info_tv);

  // 開啟服務器
  ExecutorService exec = Executors.newCachedThreadPool();
  UDPServer server = new UDPServer();
  exec.execute(server);

  // 發(fā)送消息
  send_bt.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    UDPClient client = new UDPClient(msg_et.getText().toString());
    info_tv.setText(client.send());
   }
  });
 }
}

注意在配置文件中要加上:

以獲取相應的權限。

效果圖:

LogCat打印出來的服務器端信息:

相關文章

  • android studio集成unity導出工程的實現(xiàn)

    android studio集成unity導出工程的實現(xiàn)

    本文主要介紹了android studio集成unity導出工程的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • android自定義Camera實現(xiàn)錄像和拍照

    android自定義Camera實現(xiàn)錄像和拍照

    這篇文章主要為大家詳細介紹了android自定義Camera實現(xiàn)錄像和拍照功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android視頻加水印之FFmpeg的簡單應用實例

    Android視頻加水印之FFmpeg的簡單應用實例

    最近有個需求,需要錄制視頻,能添加水印,所以下面這篇文章主要給大家介紹了關于Android視頻加水印之FFmpeg的簡單應用的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • Android程序打開和對輸入法的操作(打開/關閉)

    Android程序打開和對輸入法的操作(打開/關閉)

    整理了一下Android下對輸入法的操作:打開輸入法窗口、關閉出入法窗口、如果輸入法打開則關閉,如果沒打開則打開、獲取輸入法打開的狀態(tài)
    2013-05-05
  • Android中Java和JavaScript交互實例

    Android中Java和JavaScript交互實例

    這篇文章主要介紹了Android中Java和JavaScript交互實例,本文給出了實現(xiàn)方法、實現(xiàn)代碼、js調用Java、java調用js等內容,需要的朋友可以參考下
    2015-01-01
  • Android+Flutter實現(xiàn)彩虹圖案的繪制

    Android+Flutter實現(xiàn)彩虹圖案的繪制

    彩虹,是氣象中的一種光學現(xiàn)象,當太陽光照射到半空中的水滴,光線被折射及反射,在天空上形成拱形的七彩光譜。接下來,我們就自己手動繪制一下彩虹圖案吧
    2022-11-11
  • 解決django 多個APP時 static文件的問題

    解決django 多個APP時 static文件的問題

    這篇文章主要介紹了解決django 多個APP時 static文件的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • android實現(xiàn)一鍵鎖屏和一鍵卸載的方法實例

    android實現(xiàn)一鍵鎖屏和一鍵卸載的方法實例

    這篇文章主要給大家介紹了關于android如何實現(xiàn)一鍵鎖屏和一鍵卸載的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-05-05
  • Android組件之間交互核心Intent用法分析

    Android組件之間交互核心Intent用法分析

    這篇文章主要介紹了Android組件之間交互核心Intent用法,結合實例形式分析了Intent實現(xiàn)組件之間交互的步驟與相關技巧,需要的朋友可以參考下
    2016-06-06
  • Android API開發(fā)之SMS短信服務處理和獲取聯(lián)系人的方法

    Android API開發(fā)之SMS短信服務處理和獲取聯(lián)系人的方法

    這篇文章主要介紹了Android API開發(fā)之SMS短信服務處理和獲取聯(lián)系人的方法,結合實例形式分析了Android API實現(xiàn)SMS短信發(fā)送及獲取聯(lián)系人的相關操作步驟與實現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08

最新評論

邯郸市| 乌拉特前旗| 霍州市| 镶黄旗| 香格里拉县| 正宁县| 高碑店市| 太康县| 乐东| 漳平市| 通化县| 剑阁县| 介休市| 循化| 重庆市| 伊春市| 芮城县| 砀山县| 垣曲县| 尉犁县| 平远县| 南昌县| 石家庄市| 富平县| 揭阳市| 弋阳县| 襄垣县| 临洮县| 漠河县| 察隅县| 垫江县| 肥乡县| 淳化县| 米林县| 丹阳市| 千阳县| 庆安县| 岳普湖县| 奉新县| 永登县| 图木舒克市|