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

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

以获取相应的权限。

效果图:

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

时间: 2014-10-09

Android实现TCP客户端接收数据的方法

本文实例讲述了Android实现TCP客户端接收数据的方法.分享给大家供大家参考,具体如下: 配合log4net使用,用来接收调试信息.因此,此客户端只管通过TCP接收字符串数据,然后显示在界面上. 接收TCP数据 try { Socket s = new Socket("192.168.1.5", 8240); InputStream inputStream = s.getInputStream(); DataInputStream input = new DataInputStre

Android编程实现TCP、UDP客户端通信功能示例

本文实例讲述了Android编程实现TCP.UDP客户端通信功能.分享给大家供大家参考,具体如下: 在进行Android开发的过程中,免不了,要开发TCP/UDP通讯的程序,下面这两段代码,分别介绍了TCP/UCP通过的一个实例: 代码一 TCP通讯: private void tcpdata() { try { Socket s = new Socket("192.168.0.25", 65500); // outgoing stream redirect to socket Out

Android中使用tcpdump、wireshark进行抓包并分析技术介绍

本文主要介绍如何使用tcpdump和wireshark对Android应用程序进行抓包并分析,需要说明的是在抓包之前,你的Android设备必须root过了,另外你的电脑必须有Android SDK环境. 下载并安装tcpdump tcpdump链接:http://www.tcpdump.org/ 选择一个版本下载并解压提取出其中呃tcpdump文件,然后push到你的手机上去: 复制代码 代码如下: adb push c:\tcpdump /data/local/tcpdump 进一步操作:

Android使用socket创建简单TCP连接的方法

本文实例讲述了Android使用socket创建简单TCP连接的方法.分享给大家供大家参考,具体如下: 不管是在Java还是Android编程中,通信都是及其重要的一部分.有连接的socket编程,重要性自然毋庸置疑. 这里以一个简单的demo演示一个最基本的socket编程. 先写服务端.服务端是Java代码.笔者懒得装eclipse等编程软件,就是直接notepad编程,dos运行的.服务端一般是新建一个绑定端口的serversocket,监听客户端请求(死循环监听).当接收到客户端消息时,

Android编程实现TCP客户端的方法

本文实例讲述了Android编程实现TCP客户端的方法.分享给大家供大家参考,具体如下: 因为项目上需要实现一个TCP Client 端:在网上找好多例子基本上都是阻塞方式完成: 我的实现例子:由Activity 及sever 来实现,在sever 创建一个线程来监听接受数据.收到数据,通过广播发送给Activity; 服务端我没有去实现,你可以下载TCP Socket 调试工具v2.2:创建个9005端口:客户端:访问的IP为10.0.2.2 AnetTest.java: /** * Copy

Android下使用TCPDUMP实现数据抓包教程

如果想分析Android下 某个APP的网络数据交互,需要在Android手机上抓包,最常用的抓包工具非tcpdump莫属,用tcpdump生成Wireshark识别的 pcap文件,然后将pcap文件下载到电脑上,用电脑上的Wireshark加载pcap文件,通过Wireshark分析tcpdump抓取的数据. 一.安装tcpdump 为Android手机安装tcpdump,首先必须将Android手机root,现在市面上常用的root工具都很傻瓜很强大,推荐使用root精灵,将手机root以

Android编程使用HTTP协议与TCP协议实现上传文件的方法

本文实例讲述了Android编程使用HTTP协议与TCP协议实现上传文件的方法.分享给大家供大家参考,具体如下: Android上传文件有两种方式,第一种是基于Http协议的HttpURLConnection,第二种是基于TCP协议的Socket. 这两种方式的区别是使用HttpURLConnection上传时内部有缓存机制,如果上传较大文件会导致内存溢出.如果用TCP协议Socket方式上传就会解决这种弊端. HTTP协议HttpURLConnection 1. 通过URL封装路径打开一个Ht

android的UDP编程实例

一.有的手机不能直接接收UDP包,可能是手机厂商在定制Rom的时候把这个功能给关掉了.1.可先在oncreate()方法里面实例化一个WifiManager.MulticastLock 对象lock:具体如下: 复制代码 代码如下: WifiManager manager = (WifiManager) this                .getSystemService(Context.WIFI_SERVICE);WifiManager.MulticastLock lock= manag

Android中实现TCP和UDP传输实例

TCP和UDP在网络传输中非常重要,在Android开发中同样重要. 首先我们来看一下什么是TCP和UDP. 什么是TCP? TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的.可靠的.基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified).在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能.应用层向TCP层发送用于网间传输的.用8位字节表示的数据流,然后TCP

Android实现TCP断点上传 后台C#服务接收

终端实现大文件上传一直都是比较难的技术,其中涉及到后端与前端的交互,稳定性和流量大小,而且实现原理每个人都有自己的想法,后端主流用的比较多的是Http来实现,因为大多实现过断点下载.但稳定性不能保证,一旦断开,无法续传.所以得采用另一种流行的做法,TCP上传大文件. 网上查找了一些资料,大多数是断点下载,然后就是单独的C#端的上传接收,或是HTTP的,或是只有android端的,由于任务紧所以之前找的首选方案当然是Http先来实现文件上传,终端采用Post方法,将文件直接传至后端,后端通过Fil

Android TCP 文件客户端与服务器DEMO介绍

主要功能是: 1.TCP服务器提供文件下载服务,服务器支持多线程. 2.TCP Client从服务器上下载指定的文件,Client也支持多线程. 首先是服务器,服务器是在PC机上,JAVA运行环境,主要参考网上的代码,自己做了支持多线程处理,代码如下: 复制代码 代码如下: //file:DownloadServer.java import java.net.*;import java.io.*;class ServerOneDownload extends Thread {    privat

详解Android客户端与服务器交互方式

最近的Android项目开发过程中一个问题困扰自己很长时间,Android客户端与服务器交互有几种方式,最常见的就是webservices和json.要在Android手机客户端与pc服务器交互,需要满足下面几种条件:跨平台.传输数据格式标准.交互方便. 为了与服务器通讯其实无非就两种协议HTTP和TCP,TCP的学习Socket,HTTP的话熟悉一下HTTP协议和相关Java API.而下面的几种方式就是从这两种协议扩展出来的:webservices soap.SSH的JSON(可参考:该链接

浅谈Android客户端与服务器的数据交互总结

前言: 本文总结了Android客户端与服务器进行交互时,采用RESTful API +Json的交互方式,针对不同的数据形式以及不同的解析方法,如有不足之处,欢迎指正. 温馨提示:本文适合有一定Android开发经验的人阅读,如有疑问,欢迎留言讨论. 先了解一下相关的基本概念. 1. Android客户端与服务器端通信方式 通信方式主要有HTTP和Socket. HTTP通信:即使用HTTP协议进行通信,工作原理是客户端向服务器端发送一条HTTP请求,服务器收到之后先解析客户端的请求,之后会返

Android编程之客户端通过socket与服务器通信的方法

本文实例讲述了Android编程之客户端通过socket与服务器通信的方法.分享给大家供大家参考,具体如下: 下面是一个demo,Android客户端通过socket与服务器通信. 由于Android里面可以完全使用java.io.*包和java.net.*包,那么,实际上,逻辑部分与J2SE没有区别.只是UI代码不一样. Android客户端通过socket与服务器通信分为下面5步: (1)通过IP地址和端口实例化Socket,请求连接服务器: 复制代码 代码如下: socket = new

python3实现TCP协议的简单服务器和客户端案例(分享)

利用python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱.下面代码就是模拟客户端通过命令行操作服务器.客户端输入命令,服务器执行并且返回结果. TCP(Transmission Control Protocol 传输控制协议):是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义. TCP客户端 from socket import * host = '192

Android开发使用json实现服务器与客户端数据的交互功能示例

本文实例讲述了Android开发使用json实现服务器与客户端数据的交互功能.分享给大家供大家参考,具体如下: 第一步:写一个远程查询工具类,使用单例模式 /** * 查询远程服务器的工具 * @author chen.lin * */ public class QueryUtils { //private static final String TAG = "CommonUtils"; private static QueryUtils instance; private Share

Java实现文件上传服务器和客户端

本文实例为大家分享了Java实现文件上传服务器和客户端的具体代码,供大家参考,具体内容如下 文件上传服务器端: /** * 使用TCP协议实现上传功能的服务器端 * 思路: * 新建ServerSocket * 等待客户端连接 * 连接上后开启子线程,把连接获取的Socket传给子线程 * 循环进行 * @author yajun * */ public class UploadServer { public static void main(String[] args) { UploadSer

java模拟客户端向服务器上传文件

本文实例为大家分享了java客户端向服务器上传文件的具体代码,供大家参考,具体内容如下 先来了解一下客户端与服务器Tcp通信的基本步骤: 服务器端先启动,然后启动客户端向服务器端发送数据. 服务器端收到客户端发送的数据,服务器端会响应应客户端,向客户端发送响应结果. 客户端读取服务器发送的数据 文件上传步骤: 客户端使用本地字节输入流,指定上传数据的数据源. 客户端使用网络字节输出流,把读取的本地文件上传到服务器. 服务器使用网络字节输入流,读取客户端上传的文件. 服务器使用本地字节输出流,把读

Java利用TCP协议实现客户端与服务器通信(附通信源码)

进行TCP协议网络程序的编写,关键在于ServerSocket套接字的熟练使用,TCP通信中所有的信息传输都是依托ServerSocket类的输入输出流进行的. 上一篇博客和大家分享了在网络编程中要注意的基础知识,关于IP.TCP.UDP以及端口和套接字的一些概念,想了解的小伙伴可以看我的这篇文章"盘点那些进行网络编程必须要知道的基础知识",那么今天大灰狼就来和大家分享一下如何使用TCP/IP进行网络程序的开发. TCP协议概念 先来了解一下TCP协议的基本概念. 我们知道TCP是可靠

python中的socket实现ftp客户端和服务器收发文件及md5加密文件

客户端向服务器发送一个请求,请求内容是一个文件名,服务器在查找自己这边有没有这个文件,如果有的话就发送给客户端 1.客户端 生成socket对象 建立连接 输入想要接收的文件 将输入的文件名发送给服务器 接收服务器发回的关于即将要发送来的文件的大小 发送一条信息给服务器告诉它准备好接收了 接收文件数据 打印全部接收的提示信息 client具体实现的代码如下: # Author: Mr.Xue # 2019.10.29 # socket_ftp_client.py import socket im