UDP通讯与TCP代码上的比较,UDP的特点是数据要用包进行传输。
数据报包用来实现无连接包投递服务。DatagramPacket的构函有发送数据、接收的数据的。凡是带有地址和端口的都是发送数据。电脑单机在演示时,IP地址是127.0.0.1。
UDP 特点:
• 将数据及源和目的封装成数据包中,不需要建立连接
• 每个数据包的大小在限制在64k内
• 因无连接,是不可靠协议
• 不需要建立连接,速度快
可以用于:文字聊天 视频聊天 网络视频会议
注意:
*发送时,要用byte数组发送
*接收时,要用byte数组接收
package asin.asinbetter;
import java.io.*;
import java.net.*;
//客户端代码
class UdpClient
{
public static void main(String[] args) throws Exception {
//创建客户端的Socket服务
DatagramSocket ds = new DatagramSocket();
//键盘录入
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line=bufr.readLine())!=null)
{
//当输入"886"时结束程序
if("886".equals(line))
break ;
//dp发送的是字节数组,所以要转换键盘录入的String
byte [] buf = line.getBytes();
//获取包,并指定ip、端口
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10005);
//用客户端服务发送数据包
ds.send(dp);
}
//关闭资源
ds.close();
}
}
//服务器端代码
class UdpServer
{
public static void main(String[] args) throws Exception {
//创建服务器端服务,指定接收的端口
DatagramSocket ds = new DatagramSocket(10005);
//一直读取客户端发来的信息
while(true)
{
byte [] buf = new byte[1024];
//数据需要用byte数组存放
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//服务器端服务接收数据包
ds.receive(dp);
String ip = dp.getAddress().getHostAddress();//获取ip地址
String data = new String(dp.getData(),0,dp.getLength());//获取数据
int port = dp.getPort();//获取发来信息的客户端的端口(不是服务器接收的端口)
//打印信息
System.out.println(ip+"::"+data+"::"+port);
}
}
}