DatagramSocket数据包/UDP

news/2024/5/18 14:09:38 标签: udp, DatagramSocket


之前有写过关于TCP协议的socket套接字,这里介绍的是UDP的数据包DatagramSocket


TCP和UDP的优缺点以及他们各自的特点这里我就不多说了。总之都是有利有弊,


看中速度,那么就"牺牲"安全,注重安全,那么在速度方面可能就要作出“牺牲”了。


下面通过一个小例子来说明UDP的DatagramSocket


客户端:

package com.data.socket;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

/**
 * 客户端【数据包发送】
 * @author winy_lm
 *
 */
public class DatagramSocketClient {

	public static void main(String[] args) {
		try {
			// 创建一个socket对象
			DatagramSocket socket = new DatagramSocket();
			
			//封装需要发送的信息数据包
			byte[] b = "客户端发送数据验证".getBytes();
			DatagramPacket packet = new DatagramPacket(
					b, 
					b.length, 
					InetAddress.getLocalHost(), //ip地址,InetAddress类提供各种获取计算机信息的方法
					9555);// 端口号
			
			//向端口为
			socket.send(packet);
			
		} catch (SocketException e) {
			e.printStackTrace();
		}catch (UnknownHostException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}
	}
}


服务器:

package com.data.socket;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
/**
 * 服务器【数据包接收】
 * @author winy_lm
 *
 */
public class DatagramSocketServer {
	public static void main(String[] args) {
		try {
			// 创建一个服务,指定端口号
			DatagramSocket socket = new DatagramSocket(9555);
			
			// packet对象需要一个字节数组参数
			byte[] b = new byte[100];
			
			// 创建一个空的数据包对象,用来接收客户端client传过来的packet数据包
			DatagramPacket packet = new DatagramPacket(b, b.length);
			
			// 通过socket将发送到当前端口的数据包接收到packet中
			socket.receive(packet);
			
			// 输出该数据包的数据
			System.out.write(packet.getData(),0,packet.getLength());
			
			System.out.println();//换行,为了和输出数据包信息区分开来
			System.out.println("当启动server服务器时,验证此处是否在启动的时候就执行");
			
			
		} catch (SocketException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}
	}
}



注意:


在讲解socket的时候有说过,必须先启动服务器,要不然客户端会报错![java.net.ConnectException: Connection refused: connect]


但是这里是通过DatagramSocket来发送信息,也就是采取的UDP的方式,所以当先启动客户端的时候,不会报任何错误!


还有一种情况是先启动服务器,当客户端发送数据的端口号设置错误的时候,也不会报错!!!


即采用DatagramSocket是不需要服务器反馈任何信息的,客户端信息发出去就行了,不会去管有没有发送成功或是发送正确!!!



欢迎大家提出宝贵意见!!!!!!!





http://www.niftyadmin.cn/n/1332811.html

相关文章

娱乐头条-06IndexWrite

案例&#xff1a;将数据库中的新闻定时写入到索引库中 1、pom文件 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…

UML之类图

UML图中类之间的关系包括&#xff1a;泛化&#xff08;Generalization&#xff09;[继承], 实现&#xff08;Realization&#xff09;[接口实现], 关联&#xff08;Association), 聚合&#xff08;Aggregation&#xff09;, 组合(Composition), 依赖(Dependency)。 这些也是画…

多线程_生产者与消费者

一. 概念 进程是指在系统中正在运行的一个应用程序&#xff1b; 线程是系统分配处理器时间资源的基本单元&#xff0c;或者说进程之内独立执行的一个单元。 对于操作系统而言其调度单元是线程。一个进程至少包括一个线程&#xff0c;通常将该线程称为主线程。 一个进程从主线程…

SVN服务器以及客户端安装和使用

为了使在家里写的代码能明确的定位到每个版本&#xff0c;所以安装个SVN服务器&#xff0c;以便代码的备份以及版本控制&#xff01; 下面是详细的安装步骤以及安装过程中出现的问题&#xff01;&#xff01; 本人电脑有安装过SVN的客户端&#xff0c;为了使客户端和服务器的版…

Linux下JDK.Eclipse.Tomcat安装

一.下载Linux下的JDK版本[jdk-7u79-linux-x64.tar.gz] 下载地址这里就不再提供了&#xff01; 二.解压安装 1.已有的JDK卸载 1.1 java -version //查询是否已有JDK&#xff0c;一般默认安装有个openjdk 1.2 rpm -qa | grep jdk //输入该命令&#xff0c;显示安装的op…

数值计算精度问题(double,float,Bigdecimal)

对于含有小数点的数值之间的计算&#xff0c;必须严谨对待&#xff01;银行&#xff0c;金融等行业关于金钱的计算&#xff0c;小数点后面的数值显得尤为重要&#xff01; 对于double(64)&#xff0c;float(32)类型的数值之间的计算&#xff0c;往往计算出来的值会失真&#…

Nexus安装

Nexus&#xff0c;大家口中的私服&#xff0c;是Maven仓库服务软件&#xff01;&#xff01;&#xff01;对应端口8081 私服不是Maven的核心概念&#xff0c;它仅仅是一种衍生出来的特殊的Maven仓库&#xff0c;通过建立自己的私服&#xff0c;就可以降低中央仓库负荷、 节省外…

MySQL事务以及select...for update

MySQL中的事务&#xff0c;默认是自动提交的&#xff0c;即autocommit 1&#xff1b; 但是这样的话&#xff0c;在某些情形中就会出现问题&#xff1a;比如&#xff1a; 如果你想一次性插入了1000条数据&#xff0c;mysql会commit1000次的&#xff0c; 如果我们把autocommi…