网络编程(学习整理)---2--(Udp)实现简单的控制台聊天室
2016-07-11 20:37
633 查看
1、UDP协议:
总结一下,今天学习的一点知识点!
UDP也是一种通信协议,常被用来与TCP协议作比较!我们知道,在发送数据包的时候使用TCP协议比UDP协议安全,那么到底安全在哪里呢?怎么理解呢!
下面我说一下我的简单理解!
由于TCP协议是一种面向连接的协议,有三次挥手通信确认机制,且数据包没有代销限制,TCP协议确保在通信双方都收到对方确认信息的前提下,才开始为通信的双方传输信息(数据包)!
这样数据包的传输可以得到安全保障!所以简单的理解为安全的!当然一旦,出现网络问题,或者一些其他意外现象造成通信双方的连接出现异常或断开连接,使用TCP是不能传输信息的!
那么相对的!
UDP不是一种面向连接的协议,就是说,在使用UDP协议进行数据交互的时候,彼此可以不连接,通信的一端突然地向另外一端发送数据包,但是对方没有启动接收程序,那么对方当时是收不到数据包的,或者当你发送数据的过程中,突然出现意外断网,停电等等意外现象,都有可能造成对方收不到信息!也就说,你发送的信息对方没收到,同时你也不知道对方有没有收到!这不好!
说的有点绕了!现在举一个例子作比较吧!
场景:(1)在一个教室里面(例比:一个局域网内!)
(2)有小明和小美两个同学(例比:通信的双方!)
(3)小明要把一本书交给小美(例比:小明向小美发送一个数据包(书)!)
比较:
当TCP协议方式:
(1)tcp面向连接:
小明需要在班里找到小美,走到小美面前,亲手把手交给小美!小美确认小明给他书的是小明,然后接收到小明归还的书!
当UDP协议方式:
(1)udp不是面向连接:
小明从座位上站起来,看到小美在的位置方向,可能叫一声“小美”,或者什么也没说,直接把书朝着小美的位置方向!小美可能收到书,也可能没收到!
例子分析:
(1)TCP协议下的操作是可以确保小美收到小明归还的书的!
(2)UDP协议下的操作具有不确定性,可能扔书的时候,小美不知道走开了(接收端没有开启!)
可能扔书的时候,中间力道不够,没扔到位置处(网络断开,停电,或电脑出现异常等意外现象的发生!)
可能书在半空中被别人截获了(数据包被截获!)
这种方式数据的传送不能得到保证!不安全!但是速度快啊!直接扔就行了,不需要再走到小美面前!
2、UDP通讯协议的特点:
1. 将数据极封装为数据包,面向无连接。
2. 每个数据包大小限制在64K中
3.因为无连接,所以不可靠
4. 因为不需要建立连接,所以速度快
5.udp 通讯是不分服务端与客户端的,只分发送端与接收端。
比如: 物管的对讲机, 飞Q聊天、 游戏...
3、udp协议下的Socket:
DatagramSocket(udp插座服务)
DatagramPacket(数据包类)
DatagramPacket(buf, length, address, port)
buf: 发送的数据内容
length : 发送数据内容的大小。
address : 发送的目的IP地址对象
port : 端口号。
4、发送端的使用步骤:
1. 建立udp的服务。
2. 准备数据,把数据封装到数据包中发送。 发送端的数据包要带上ip地址与端口号。
3. 调用udp的服务,发送数据。
4. 关闭资源。
5、接收端的使用步骤:
1. 建立udp的服务
2. 准备空 的数据 包接收数据。
3. 调用udp的服务接收数据。
4. 关闭资源
6、UDP协议小案例(1):发送端和接收端的信息交互!
发送端:
接收端:
6、UDP协议小案例(2):群聊(控制台实现)!
总结一下,今天学习的一点知识点!
UDP也是一种通信协议,常被用来与TCP协议作比较!我们知道,在发送数据包的时候使用TCP协议比UDP协议安全,那么到底安全在哪里呢?怎么理解呢!
下面我说一下我的简单理解!
由于TCP协议是一种面向连接的协议,有三次挥手通信确认机制,且数据包没有代销限制,TCP协议确保在通信双方都收到对方确认信息的前提下,才开始为通信的双方传输信息(数据包)!
这样数据包的传输可以得到安全保障!所以简单的理解为安全的!当然一旦,出现网络问题,或者一些其他意外现象造成通信双方的连接出现异常或断开连接,使用TCP是不能传输信息的!
那么相对的!
UDP不是一种面向连接的协议,就是说,在使用UDP协议进行数据交互的时候,彼此可以不连接,通信的一端突然地向另外一端发送数据包,但是对方没有启动接收程序,那么对方当时是收不到数据包的,或者当你发送数据的过程中,突然出现意外断网,停电等等意外现象,都有可能造成对方收不到信息!也就说,你发送的信息对方没收到,同时你也不知道对方有没有收到!这不好!
说的有点绕了!现在举一个例子作比较吧!
场景:(1)在一个教室里面(例比:一个局域网内!)
(2)有小明和小美两个同学(例比:通信的双方!)
(3)小明要把一本书交给小美(例比:小明向小美发送一个数据包(书)!)
比较:
当TCP协议方式:
(1)tcp面向连接:
小明需要在班里找到小美,走到小美面前,亲手把手交给小美!小美确认小明给他书的是小明,然后接收到小明归还的书!
当UDP协议方式:
(1)udp不是面向连接:
小明从座位上站起来,看到小美在的位置方向,可能叫一声“小美”,或者什么也没说,直接把书朝着小美的位置方向!小美可能收到书,也可能没收到!
例子分析:
(1)TCP协议下的操作是可以确保小美收到小明归还的书的!
(2)UDP协议下的操作具有不确定性,可能扔书的时候,小美不知道走开了(接收端没有开启!)
可能扔书的时候,中间力道不够,没扔到位置处(网络断开,停电,或电脑出现异常等意外现象的发生!)
可能书在半空中被别人截获了(数据包被截获!)
这种方式数据的传送不能得到保证!不安全!但是速度快啊!直接扔就行了,不需要再走到小美面前!
2、UDP通讯协议的特点:
1. 将数据极封装为数据包,面向无连接。
2. 每个数据包大小限制在64K中
3.因为无连接,所以不可靠
4. 因为不需要建立连接,所以速度快
5.udp 通讯是不分服务端与客户端的,只分发送端与接收端。
比如: 物管的对讲机, 飞Q聊天、 游戏...
3、udp协议下的Socket:
DatagramSocket(udp插座服务)
DatagramPacket(数据包类)
DatagramPacket(buf, length, address, port)
buf: 发送的数据内容
length : 发送数据内容的大小。
address : 发送的目的IP地址对象
port : 端口号。
4、发送端的使用步骤:
1. 建立udp的服务。
2. 准备数据,把数据封装到数据包中发送。 发送端的数据包要带上ip地址与端口号。
3. 调用udp的服务,发送数据。
4. 关闭资源。
5、接收端的使用步骤:
1. 建立udp的服务
2. 准备空 的数据 包接收数据。
3. 调用udp的服务接收数据。
4. 关闭资源
6、UDP协议小案例(1):发送端和接收端的信息交互!
发送端:
package cn.udp; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * UDP简单的小例子 * UDP协议下的 * 发送端 * * @author 小风微灵 * */ public class UdpSend { public static void main(String[] args) throws Exception { System.out.println("发送端!"); //建立UDP服务插座 DatagramSocket send=new DatagramSocket(); //创建发送包 String content="哈哈哈,我是神!"; DatagramPacket packet=new DatagramPacket(content.getBytes(), content.getBytes().length, InetAddress.getLocalHost(),9080); //发送数据包 send.send(packet); //发送不是阻塞型的! System.out.println("数据已发送....."); //关闭资源 send.close(); } }
接收端:
package cn.udp; import java.net.DatagramPacket; import java.net.DatagramSocket; /** * UDP简单的小例子 * UDP协议下的 * 接收端 * * @author 小风微灵 * */ public class UdpAccept { public static void main(String[] args) throws Exception { System.out.println("接收端!"); //建立UDP服务插座 DatagramSocket accept=new DatagramSocket(9080); //创建空的数据包 byte[] buf=new byte[1024]; DatagramPacket packet=new DatagramPacket(buf, buf.length); //接收数据 accept.receive(packet); //只有接收是阻型的! //打印数据 System.out.println("接收到的数据:"+new String(buf,0,packet.getLength())); //关闭 accept.close(); } }
6、UDP协议小案例(2):群聊(控制台实现)!
package cn.udp; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * 模拟聊天室:(群聊) * 协议支持:UDP * @author 小风微灵 * */ public class UDPChatingRoom { public static void main(String[] args){ new ChatSend().start(); //启动发送端 new ChatAccep().start();//启动接收端 } } /** * 群聊的接收端 * */ class ChatAccep extends Thread { public void run() { //插座 try { DatagramSocket reciver = new DatagramSocket(9999); byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); boolean isFlag = true; while(isFlag){ reciver.receive(packet); //阻塞方法 System.out.println( packet.getAddress().getHostAddress() +":"+new String(buf, 0,packet.getLength())); } reciver.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 群聊的发送端 * */ class ChatSend extends Thread{ public void run() { try { DatagramSocket send = new DatagramSocket();//插座 //得到键盘输入流 BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in)); String content = null; while((content = keyReader.readLine()) != null){ //数据包 DatagramPacket packet = new DatagramPacket(content.getBytes(), content.getBytes().length, InetAddress.getByName("127.0.0.1"), 9999); send.send(packet); System.out.println("发送端发送:"+content); } send.close(); } catch (Exception e) { e.printStackTrace(); } } }
相关文章推荐
- getaddrinfo ENOTFOUND https://api.weixin.qq.com https://api.weixin.qq.com:443
- Caffe网络可视化
- 下面关于HTTP协议的说法正确的是:----腾讯2016研发工程师笔试题(一)
- 安卓网络权限异常
- WebCollector2.X 网络JAVA爬虫入门(抓取百度百科)
- Eclipse创建JSF应用的两种方式http://blog.sina.com.cn/s/blog_9ed782ea0102vm9m.html
- java TCP socket编程2
- 基于深层神经网络的命名实体识别技术
- Anroid-async-http封装网络请求框架源码分析
- ant 打包时,软件包 javax.servlet.http 不存在解决方法
- Qt5 lambda表达式连接QTcpServer信号槽
- Http之资源
- Http之报文
- http 协议注意事项
- 本地数据与后台网络数据同步问题
- 神经网络部分历史
- Android 使用PLDroidPlayer播放网络视频 根据视频角度自动旋转
- RCNN学习笔记(8):Fully Convolutional Networks for Semantic Segmentation(全卷积网络FCN)
- Android判断用户的网络类型(2/3/4G、wifi)
- Android Volley完全解析(二),使用Volley加载网络图片