DatagramSocket数据包/UDP


之前有写过关于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是不需要服务器反馈任何信息的,客户端信息发出去就行了,不会去管有没有发送成功或是发送正确!!!



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




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值