网络编程UDP协议
课程大纲
一、 UDP协议概述
1、 UDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据包都是独立的信息,包括完整的源地址和目的地址,他在网络上以任何可能的路径传往目的地,因此能否到大目的地,到大目的地的时间以及正确性都是不能被保证的,每个被传输的数据包的大小必须保证在64K以内。
2、 主要使用以下两个类:
(1)、DatagramPacket:此类表示数据报包
(2)、DatapramSocket:此类表示发送和接受数据报包的套接字。
二、 UDP服务器与客户端程序
1、 服务器端:
(1)、String info = “…….”;
(2)、//将信息封装成数据报
Byte[] bytes = Info.getBytes();
(3)、DatagramSocket dp = new DatagramSocket(bytes,0,bytes.lenth(),InetAddress.getByName(“localhost”),5000)//客户端5000端口监。
(4)DatagramSocket server new DatagramSocket(5000);//服务器的端口。
(5)、server.send(dp);//发送数据报
(6)、server.close();
2、客户端
(1)、byte[] b = new byte[1024];接受内容
(2)、DatagramPacket dp = new DatagramPacket(b,b.length);//接收内容
(3)、DatagramSocket client = new DatagramSocket(5000);//客户端在5000端口等待。
(4)、client.receive(dp);接受内容
(5)、System.out.pritln(new String(dp.getData(),0,dp.getlength()))
(6)、client.close();
服务端代码
package us.google.www;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* UDP发送端
* @author chongrubujing
*
*/
public class UDPServerDemo {
public static void main(String[] args) throws IOException {
String info = "我是一只小小鸟";
//把数据转换成字节数组
byte[] bytes = info.getBytes();
//创建一个数据包对象,参数(要发送的字节数组,数组起始位置,要发送数组的长度,InetAddress,接收端端口号)
DatagramPacket dp =new DatagramPacket(
bytes,0,bytes.length,
InetAddress.getByName("192.168.0.51"),
5000);
//创建一个UDP协议的Socket对象
DatagramSocket ds = new DatagramSocket(300);
ds.send(dp);//发送数据报
System.out.println("发送完毕!");
}
}
客户端代码
package us.google.www;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* UDP接收端
* @author chongrubujing
*
*/
public class UDPClientDemo {
public static void main(String[] args) throws IOException {
byte[] bytes = new byte[1024];
//创建一个数据包对象
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
//创建DUP协议的Socket对象
DatagramSocket ds = new DatagramSocket(000);//在此端口进行监听
System.out.println("接受端正在接受数据!");
ds.receive(dp);//接受数据,该方法会造成阻塞
String info = new String(dp.getData(),0,dp.getLength());
System.out.println(info);
ds.close();
}
}