平时朋友们一般用socket都是用TCP/IP协议的,今天我给大家分享一个小例子,是一个udp协议传输的例子。
udp协议传输的特点:
速度快,但是有可能会丢包。但由于面向的都是例如视频等类似不用考虑是否丢一两个包的问题,所以有他使用的应用场景。
下面直接上代码,非常感谢毕老师,讲的非常透彻。
这个例子的发送和接收的ip需要改成您测试时两台机子的ip
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/*
* 需求
* 定义一个应用程序,用于接收udp协议传输的数据并处理的
* 思路:
* 1.定义upsocket服务.通常会监听一个端口,其实就是给这个接收网络应用程序定义数字标识。如果不定义系统会随机指定。
* 方便于明确哪些数据过来该应用程序会处理
* 2.定义一个数据包,因为要存储接收到的字节数据,因为数据包对象中有更多功能可以提取字节数据
* 中的不同数据信息
* 3.通过socket服务的receive方法将受到的数据存入已定义好的数据包中
* 4.通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上。
* 5.关闭资源
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/*
* 需求:通过udp传输方式,将一段文字发送出去。
* 定义了一个udp的发送端
* 思路:
* 1.建立udpsocket服务。
* 2.提供数据并将数据封装到包中。
* 3.通过socket服务的发送功能,将数据包发出去
* 4.关闭资源
*/
class UdpSend {
public static void main (String [] args) throws Exception{
//1.建立udp服务,通过DatagramSocke对象
DatagramSocket ds=new DatagramSocket(10001);
while(true){
byte[]buf="love".getBytes();
//2.确定数据,并封装成数据包
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.3.255"),10000);
//3.通过socket服务,将已有的数据包发送出去,通过send方法
ds.send(dp);
//4.关闭资源
}
// ds.close();
/*while((line=bufr.readLine())!=null){
if("886".equals(line)){
break;
}
byte[]buf=line.getBytes();
//2.确定数据,并封装成数据包 这里的最后一个.255是发送给网内的每一个人
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.3.255"),10000);
//3.通过socket服务,将已有的数据包发送出去,通过send方法
ds.send(dp);
//4.关闭资源
}
ds.close();*/
}
}
class UdpRece{
public static void main (String[]args) throws Exception{
//1.创建udp socket,建立端点
DatagramSocket ds=new DatagramSocket(10000);
while(true){
//2.定义数据包
byte[]buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf, buf.length);
//3.通过服务的receive方法将收到的数据存入数据包中
ds.receive(dp);
//4.通过数据包的方法获取其中的数据
String ip=dp.getAddress().getHostAddress();
String data=new String(dp.getData(),0,dp.getLength());
int port=dp.getPort();
System.out.println(ip+"::"+data+"::"+port);
//5.关闭资源
}
// ds.close();
}
}
|
|