Androidの网络通信之TDP
我们知道TCP协议是面向连接的,是可靠的一种传输协议。但是今天我们讲的是UDP,这是一种不可靠的传输,只负责发送数据包不保证接收方是否安全收到,也没有数据流。
这两种都算是底层传输层的协议。
但是和TCP相比虽然不够安全不够可靠,但是拥有速度上优势,TCP需要经过诸多的头部检验校准排序,而UDP则不用。
打个不恰当的比喻,UDP就像发短信TCP就像打电话,TCP需要三次握手就才能建立链接。
两个人要接通电话,打的人和接的人要都有信号都没停机都没关机才能相同,而且接收方忙的话,你还要听一段铃声才能等到接收方的声音。
而发短信就不用了,比如你想告诉你女朋友,直接发短信给她,无论她在上班还是在干嘛还是在干嘛,发完你就可以干你自己的事了。而你要打电话告诉她则需要等待她找到手机按下接听键才能相互通话。
先介绍两个UDP相关的类
DatagramSocket 这个是UDP套接字,一般服务器端可以绑定一个本机端口,而客户端发送方则不需要。
DatagramPacket 这个是数据报包,服务器端直接按缓存读,客户端则需要指定Ip地址和端口
这次我们做个android手机端跟PC端通信
PC端:
![](/assets/blank.gif)
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();} }
![](/assets/blank.gif)
手机端:
![](/assets/blank.gif)
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 ;@Overridepublic 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) ; }@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// TODO Auto-generated method stubmenu.add("发送");return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubif(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);}}
![](/assets/blank.gif)
首先运行PC接收端,在接收到发送方数据之前将会一直阻塞。而手机端会有个输入框,有个发送菜单,将会把输入框的内容给发送到PC端,虽然UDP不算可靠,但是在局域网还是挺可靠。
tip:手机和PC必须处于同一个局域网。。
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
Androidの网络通信之TDP相关推荐
- android网络通信之SOAP教程实例汇总
一.实例教程:Android网络通信之 SOAP教程篇: 1.android webservice通信之ksoap http://www.eoeandroid.com/thread-162563-1- ...
- Android 网络通信框架Volley简介(Google IO 2013)
Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v= ...
- android 网络通信框架volly
1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient( ...
- android网络通信之HTTP协议教程实例汇总
在现在的开发和应用中,网络通讯是必不可少的.虽然还是比较怀念小时候,抱着一台95在那里玩单机游戏玩的天昏地暗的时光,但是,现在,就算一个幼儿园的小盆友如果问你要手机玩游戏,突然发现居然买不了冰激凌草莓 ...
- Android 网络通信架构学习
最近跟着云课堂上的极客学院做安卓APP,学习了课程里面介绍的一种网络通信架构.清晰明了,比我自己东一块西一块拼凑出来的要好很多.在这里记录一下. 云课堂的连接:http://study.163.com ...
- sunny底层android,Android网络通信概述
网络通信在App的使用中占据重要地位,要实现网络通信,从宏观上分为两种方式,即:调用原生类和使用第三方框架. 调用原生类 Android中通过原生类进行网络通信时,根据业务场景的不同,主要分为两种方式 ...
- 《移动项目实践》实验报告——Android网络通信
实验目的 掌握数据解析(以json为例).网络请求的关键内容. 实验内容 1.接口示例(北京)http://www.weather.com.cn/data/sk/101010100.html 2.可选 ...
- Android网络通信的六种方式示例代码
表1展示了Android SDK中的一些与网络有关的API包名 表1. Android SDK 网络包 包 描述 ...
- Android网络通信的六种方式
在Android中几种网络编程的方式: (1)针对TCP/IP的Socket.ServerSocket (2)针对UDP的DatagramSocket.DatagramPackage.这里需要注意的是 ...
最新文章
- mysql 数据库异常大_Mysql连接数据库异常汇总【必收藏】
- 汇编 debug调试没有执行对应文件源码指令---》失灵---》正确使用debug第一步
- 一个让我魂牵梦萦的地方——婺源
- ServerSuperIO Designer IDE 发布,打造物联网通讯大脑,随心而联。附:C#驱动源代码。
- CCIE-LAB-第八篇-SDWAN-Branch1_Branch2_Vmanage
- oracle 01013 02063,Oracle11g dblink用户密码大写限制-ORA-02063: preceding line from FOR244_DBLINK...
- 7-172 抓老鼠啊~亏了还是赚了? (20 分)
- 2008生产实习 日程安排
- RSA js 加密解密
- OpenCore引导配置说明第六版
- Chrome浏览器安装Axure插件教程
- 赵燕菁:城市化2.0与规划转型 ——一个两阶段模型的解释│宏论
- vscode 移动到末尾并且换行快捷键
- web前端入门到实战:简单的图片轮播
- 语音识别(ASR)论文优选:挑战ASR规模极限Scaling ASR Improves Zero and Few Shot Learning
- WMS系统关于退料的几种方式
- 2022/10/10-10/15周报
- Latex模板排版等相关设置
- 使用rufus制作Windows Server 2008 U盘_wentfar·tsao
- 高级性能测试系列《13.察看结果树中的显示顺序、 响应的提取--json提取器》