DatagramSocket数据包/UDP

来源:互联网 发布:手机淘宝分享在哪 编辑:程序博客网 时间:2024/05/29 18:04


之前有写过关于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 0
原创粉丝点击