黑马程序员-网络编程之UDP传输小总结
来源:互联网 发布:最好用的手机编程软件 编辑:程序博客网 时间:2024/04/28 23:19
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
UDP和TCP
UDP:无连接,不可靠,速度快,数据报大小不超过64k。聊天工具,实时摄像投影软件都是UDP。
TCP:面向连接,通过三次握手监测链接,可靠,速度慢,TCP数据包容量更大。下载软件用的是TCP。
UDP传输:
发送端:
1 创建udp服务,通过DatagramSocket对象。DatagramSocket对象是包投递服务的发送或接受点。
DatagramSocket ds=new DatagramSocket(20000);//为自己指定端口号是20000
2 确定数据,并装成数据包。DatagramPacket类表示数据报包,用于无连接投递服务(udp)
/DatagramPacket(byte[] buf,int lenth,InetAddress address,int port)
//构造数据报包,用来将长度为lenth的发送到指定主机上的指定端口号
byte[] data="我是udp
".getBytes();
DatagramPacket dp=new DatagramPacket(data,data.length,InetAddress.getByName("127.0.0.1"),10000);
3 通过socket服务,将已有的数据包发送出去,通过send方法。
ds.send(dp);
4 关闭资源。
ds.close();
接收端:
1 创建udpsocket服务,建立端点
DatagramSocket ds=new DatagramSocket(10000);//监听10000端口,也就是为自己指定端口为10000
2 定义数据包。用于存储接收来的数据包。
//DatagramPacket(byte[]buf,int length)构造DatagramPacket,用来接收长度为length的数据包
byte[]buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
3 通过服务的receive方法将收到的数据存入数据包中。这是一个阻塞式方法,线程机制,就是说没有数据来,程序就停在这里等到数据来再向下执行。
ds.receive(dp);
4 通过数据包的方法获取其中的数据。
String ip=dp.getAddress().getHostAddress();
String data=new String(dp.getData(),0,dp.getLength());
int port=dp.getPort();//返回这个包的目的端口号(发送的时候)或者源端口号(接收的时候)。每个程序都会被系统自动随机分配一个端口号,即使程序不变,每次随机分配一个。
System.out.println(ip+"::"+data+"::"+port);
//5关闭资源
ds.close();
点对点单向聊天软件的制作,详情见UDPDemo.java 和UDPDemo2.java,用dos命令窗口来实现。
如果想实现群聊,可以把ip最后一位设为255.
利用多线程实现可以同时收发信息的聊天软件。实现代码如下:
/*编写一个聊天程序 * 有收数据的部分和发数据的部分 * 这两个部分需要同时执行,所以用到多线程技术 * 一个线程控制收,一个线程控制发 * 因为收和发的动作是不一致的,所以要定义两个run方法 * 而且这两个run方法要封装到不同的类中*/class Send1 implements Runnable{DatagramSocket ds;DatagramPacket dp;Send1(DatagramSocket ds){this.ds=ds;}public void run() {BufferedReader br=null;try {br=new BufferedReader(new InputStreamReader(System.in));String s=null;while((s=br.readLine())!=null){if(s.equals("over"))break;byte[] data=s.getBytes();dp=new DatagramPacket(data,0,data.length,InetAddress.getByName("127.0.0.1"),10003);ds.send(dp);}} catch (Exception e) {throw new RuntimeException("发送端出问题了");}finally{try {br.close();ds.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}class Receive1 implements Runnable{DatagramSocket ds;Receive1(DatagramSocket ds){this.ds=ds;}public void run() {try {while(true){byte[] data=new byte[1024];DatagramPacket dp=new DatagramPacket(data,data.length);ds.receive(dp);String s=new String(dp.getData(),0,dp.getLength());System.out.println(dp.getAddress().getHostAddress()+"的"+dp.getPort()+"端口号说:"+s);}} catch (Exception e) {throw new RuntimeException("接收端出问题了");}}}class ChatDemo{public static void main(String[]args) throws Exception{DatagramSocket sendSocket=new DatagramSocket();DatagramSocket receiveSocket=new DatagramSocket(10003);new Thread(new Send1(sendSocket)).start();new Thread(new Receive1(receiveSocket)).start();}}
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
- 黑马程序员-网络编程之UDP传输小总结
- 黑马程序员:网络编程之UDP传输
- 黑马程序员:网络编程之UDP传输
- 黑马程序员-网络编程之TCP传输小总结
- 黑马程序员——网络编程之UDP传输
- 黑马程序员-网络编程 udp传输
- 黑马程序员 【】java学习之路——网络编程之UDP传输简析
- 黑马程序员-------网络编程中udp传输协议
- 黑马程序员---网络编程(简介、UDP传输)
- 黑马程序员 【】java学习之路——网络编程 UDP 键盘录入传输
- 黑马程序员:网络编程之TCP传输
- 黑马程序员—网络编程之UDP
- 黑马程序员—网络编程之UDP
- 黑马程序员--网络编程之UDP
- 黑马程序员—网络编程之UDP
- 网络编程之UDP传输
- 黑马程序员----------UDP网络编程
- 黑马程序员 ---网络编程 UDP
- [js]表格转换为树形结构
- 目标文件格式分析工具: ar,nm,objdump,objcopy,readelf
- 创建maven project
- OpenGL ES平铺与重叠贴图的思考
- java自定义注解
- 黑马程序员-网络编程之UDP传输小总结
- jQueryEasyUI Messager基本使用
- 12
- at new at end of at last
- Android Apn相关整理
- mysql链接查询汇总(内链接、左链接、右链接、、、、、、)
- 好记性不如烂笔头-sql语句查询数据库格式化时间
- 时间格式随系统格式
- Android [LED]如何配置LCD背光和LED,调试方法 M