使用UDP协议实现文字交互

  网络通信协议有很多种,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal传输控制协议/英特网互联协议),它是一个包括TCP协议和IP协议,UDP(User Datagram Protocol)协议和其它一些协议的协议组。

  UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。

  TCP协议是面向连接的通信协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”。第一次握手,客户端向服务器端发出连接请求,等待服务器确认,第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求,第三次握手,客户端再次向服务器端发送确认信息,确认连接。由于TCP协议的面向连接特性,它可以保证传输数据的安全性,所以是一个被广泛采用的协议,例如在下载文件时,如果数据接收不完整,将会导致文件数据丢失而不能被打开,因此,下载文件时必须采用TCP协议。

  前面介绍了UDP是一种面向无连接的协议,因此,在通信时发送端和接收端不用建立连接。

  UDP通信需要用到两个类——DatagramPacket类和DatagramSocket类。

  DatagramPacket类用于封装UDP通信中发送或者接收的数据。

  DatagramPacket类会用到下面两个方法

  DatagramPacket类——使用这个类的实例对象就可以发送和接收DatagramPacket数据包。

这个类用到下面的方法。

UDP协议就介绍到这,下面演示文字交互代码(由于只有一台电脑所以用的是本机地址)

发送端

package com.lty.wangluojianpanluru;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/*
 *实现UDP协议的发送端
 * 		实现封装数据的类java.net.DatagramPacket 将数据包装
 * 		实现数据传输的类java.net.DataGramPacket	将数据包发出去
 *
 * 实现步骤:
 * 	1.创建DatagramPacket对象,封装数据,接收的地址和端口
 * 	2.创建DatagramSocket
 *  3.调用DatagramSocket类方法send,发送数据包
 *  4.关闭资源
 *
 *  DatagramPacket构造方法
 *  	DatagramPacket(byte[] buf, int length, InetAddress address, int port)
 *
 *  DatagramSocket构造方法:
 *  	DatagramSocket()空参数
 *  	方法: send(DatagramPacket d)
 * 文字交互案例思想
 *  实现UDP发送,键盘输入的形式
 * 		输入完毕发给接收端
 */
public class UDPsend {
	public static void main(String[] args) throws IOException{
		Scanner sc=new Scanner(System.in);
		//创建DatagramSocket对象,数据包的发送和接收对象
		DatagramSocket ds =new DatagramSocket();
		//创建InetAddress对象,封装自己的IP地址
		InetAddress inet=InetAddress.getByName("127.0.0.1");

		while(true) {
		String message=sc.nextLine();
		//创建数据包对象,封装要发送的数据,接收端IP,端口
		byte[] date=message.getBytes();
		DatagramPacket dp=new DatagramPacket(date,date.length,inet,5000);
		//调用ds对象的方法send,发送数据包
		ds.send(dp);
		}
//		ds.close();
	}
}

  接收端

package com.lty.wangluojianpanluru;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/*
 * 实现UDP协议的接收端
 * 		实现封装数据的类java.net.DatagramPacket  将数据包接收
 * 		实现数据输出的类java.net.DataGramPacket  接收数据包
 *
 * 实现步骤:
 * 	1.创建DatagramSocket对象,绑定端口号
 * 		要和发送端端口号一致
 * 	2.创建字节数组,接收发来的数据
 *  3.创建数据包对象DatagramPacket
 *  4.调用DatagramSocket对象方法
 *  	received(DatagramPacket dp)接收数据,数据放在数据包中
 *  5.拆包
 *  	发送的IP地址
 *  		数据包对象DatagramPacket方法getAddress()获取的是发送端的IP地址对象
 *  返回值是InetAddress对象
 *  	接收到的字节个数
 *  		数据包对象DatagramPacket方法getLength()
 *  	发送方的端口号
 *  6.关闭资源
 *
 *文字交互案例思想
 *  实现UDP协议的接收端
 *  永不停歇的接收端
 *
 */
public class UDPReceive {

	public static void main(String[] args) throws IOException{
		// 创建数据包传输对象DatagramSocket 绑定端口号
		DatagramSocket ds=new DatagramSocket(5000);
		//创建字节数组
		byte[] data = new byte[1024];
		//创建数据包对象,传递字节数组

		while(true) {
		DatagramPacket dp=new DatagramPacket(data,data.length);
		//调用ds对象的方法receive传递数据包
		ds.receive(dp);

		//获取发送端的IP地址对象
		String ip=dp.getAddress().getHostAddress();

		//获取接收到的字节个数
		int length = dp.getLength();
		System.out.println(new String(data,0,length)+"....."+ip);
		}
//		ds.close();
	}

}

  因为无论发送还是接收都不可能只进行一次,所以会有死循环。

原文地址:https://www.cnblogs.com/GoodBless/p/11040640.html

时间: 2024-10-18 03:49:32

使用UDP协议实现文字交互的相关文章

理解TCP和UDP协议

目录 TCP 协议 UDP协议 TCP和UDP的区别 TCP和UDP的使用场景 一 TCP协议 1.TCP的头部格式 理解TCP协议,首要的就是TCP协议的头部格式 ·        Source Port和Destination Port:分别占用16位,表示源端口号和目的端口号:用于区别主机中的不同进程,而IP地址是用来区分不同的主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能唯一的确定一个TCP连接: ·        Sequence Number:用来标识从T

传输层:UDP协议

传输层:UDP 协议 一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP 数据报首部就标明了这两台主机的 IP 地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此,严格地讲,通信双方不是主机,而是主机中的进程.主机中常常有多个应用进程同时在与外部通信(比如你的浏览器和 QQ 在同时运行),下图中,A 主机的 AP1 进程在于 B 主机的 AP3 进程通信,同时主机 A 的 AP2 进程也在与 B 主机的 AP4 进程通信.两个主机的传输层

网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1.A2和B2提供服务. Socket概述 ①   所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过“套接字”向网络发出请求或者应答网络请求. ②   Socket是连接运行在网络上的两个程序间的双向通信的端点. ③  

UDP协议疑难杂症全景解析

转载:http://blog.csdn.net/dog250/article/details/6896949 UDP协议疑难杂症全景解析 2011-10-22 19:26 2989人阅读 评论(4) 收藏 举报 tcp网络算法交通socket通讯 如今,但凡说精通网络的,第二个意思就是"精通TCP",事实上,很多自称精通TCP的家伙们只是精通socket接口而已,对TCP行为精通的并不多,笔者也不算精通,但绝对是中等以上水平.如果你真的精通TCP行为,那么本文不读也罢,直接发邮件给我,

TCP协议与UDP协议的区别

TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! TCP/IP协议是一个协议簇.里面包括很多协议的.UDP只是其中的一个.之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了.   常用的网络协议 -UDP:概念来自于"电报"     -只管发送,不确认对方是否收到     -以数据包的形式发送,每个数据包不能

Netty4.x中文教程系列(七)UDP协议

将近快一年时间没有更新Netty的博客.一方面原因是因为项目进度的问题.另外一方面是博主有一段时间去熟悉Unity3D引擎. 本章节主要记录博主自己Netty的UDP协议使用. 1. 构建UDP服务端 首先我们应该清楚UDP协议是一种无连接状态的协议.所以Netty框架区别于一般的有链接协议服务端启动程序(ServerBootstrap). Netty开发基于UDP协议的服务端需要使用Bootstrap 1 package dev.tinyz.game; 2 3 import io.netty.

在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章?(QQ 为什么采用 UDP 协议,而不采用 TCP 协议实现?)

为了解决这题,可以具体看看下面这个讨论. 解灵运工程师 185 人赞同 某次架构师大会上那个58同城做即时通信的人说:原因是因为当时没有epoll这种可以支持成千上万tcp并发连接的技术,所以他们使用了udp,然后在udp上面封装了一下,模拟了一下tcp,解决了大并发的问题,之后因为做的很nb了,虽然epoll这种技术出现了,还是没有改回使用tcp了.现在再做类似的东西就不需要使用udp了.这个说法应该比较可信的. 发布于 2014-04-16 18 条评论 感谢 分享 收藏 • 没有帮助 • 

UDP协议详解

1.UDP协议的作用 IP协议无法区别同一个主机系统上的多个应用程序.UDP采用端口标识同一主机上的不同应用程序. 无法采取进程ID来标识不同应用程序的原因: 1)系统中应用程序的进程ID分配和销毁是动态的,发送方无法确定该应用程序的进程ID是什么 2)有时可能在一个进程中实现多个功能,进程就需要对数据包进行区分,以判断是用以实现哪个功能的,使用进程ID无法做到这点. 3)有时需要访问主机上的某个标准服务时,无须知道实现该服务的程序是哪个,也就无须知道该进程ID,只需要一个统一标识就可 综上,所

Java中的UDP协议编程

一. UDP协议定义   UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层——传输层,处于IP协议的上一层.UDP有不提供数据报分组.组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的. 二. 使用UDP的原因 它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频.视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包, 也不会对接收结果产生太大影响.比如我们聊天用的ICQ和O