服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android网络编程之UDP通信模型实例

Android网络编程之UDP通信模型实例

2021-03-09 15:19Android开发网 Android

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下

什么是android udp?

udp是user datagram protocol的简称,中文名是用户数据包协议,是osi参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。它是ietf rfc 768是udp的正式规范。在网络中它与tcp协议一样用于处理数据包。在osi模型中,在第四层-传输层,处于ip协议的上一层。udp有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。udp用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用udp协议。udp协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,udp仍然不失为一项非常实用和可行的网络传输层协议。

与所熟知的tcp(传输控制协议)协议一样,udp协议直接位于ip(网际协议)协议的顶层。根据osi(开放系统互连)参考模型,udp和tcp都属于传输层协议。

udp协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

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;
 }

 /**
  * 发送信息到服务器
  */
 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("消息发送成功!").append("/n");
  } catch (ioexception e) {
   e.printstacktrace();
   sb.append("消息发送失败.").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);

  // 发送消息
  send_bt.setonclicklistener(new onclicklistener() {
   @override
   public void onclick(view v) {
    udpclient client = new udpclient(msg_et.gettext().tostring());
    info_tv.settext(client.send());
   }
  });
 }
}

 

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

以获取相应的权限。

效果图:

Android网络编程之UDP通信模型实例

logcat打印出来的服务器端信息:

Android网络编程之UDP通信模型实例

延伸 · 阅读

精彩推荐
  • AndroidAndroid实现固定屏幕显示的方法

    Android实现固定屏幕显示的方法

    这篇文章主要介绍了Android实现固定屏幕显示的方法,实例分析了Android屏幕固定显示所涉及的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    鉴客6182021-03-27
  • AndroidAndroid编程解析XML方法详解(SAX,DOM与PULL)

    Android编程解析XML方法详解(SAX,DOM与PULL)

    这篇文章主要介绍了Android编程解析XML方法,结合实例形式详细分析了Android解析XML文件的常用方法与相关实现技巧,需要的朋友可以参考下...

    liuhe68810042021-05-03
  • AndroidAndroid程序设计之AIDL实例详解

    Android程序设计之AIDL实例详解

    这篇文章主要介绍了Android程序设计的AIDL,以一个完整实例的形式较为详细的讲述了AIDL的原理及实现方法,需要的朋友可以参考下...

    Android开发网4622021-03-09
  • AndroidAndroid界面效果UI开发资料汇总(附资料包)

    Android界面效果UI开发资料汇总(附资料包)

    android ui界面设计,友好的界面会提高用户体验度;同时也增强了android ui界面设计的难度,本文提供了一些常用开发资料(有下载哦)感兴趣的朋友可以了解下...

    Android开发网4652021-01-03
  • AndroidAndroid实现Service获取当前位置(GPS+基站)的方法

    Android实现Service获取当前位置(GPS+基站)的方法

    这篇文章主要介绍了Android实现Service获取当前位置(GPS+基站)的方法,较为详细的分析了Service基于GPS位置的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    Ruthless8332021-03-31
  • AndroidAndroid中AsyncTask详细介绍

    Android中AsyncTask详细介绍

    这篇文章主要介绍了Android中AsyncTask详细介绍,AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合,需要的朋友可以参考下...

    Android开发网7432021-03-11
  • AndroidAndroid CardView+ViewPager实现ViewPager翻页动画的方法

    Android CardView+ViewPager实现ViewPager翻页动画的方法

    本篇文章主要介绍了Android CardView+ViewPager实现ViewPager翻页动画的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Abby代黎明9592022-03-02
  • Android汇总Android视频录制中常见问题

    汇总Android视频录制中常见问题

    这篇文章主要汇总了Android视频录制中常见问题,帮助大家更好地解决Android视频录制中常见的问题,需要的朋友可以参考下...

    yh_thu5192021-04-28