面向无连接,发数据之前不需要链接,将数据打包过后发送数据,如果地址没找到就把包丢弃,分为发送端和接收端
1、将数据及源和目的封装成数据包中,不需要建立连接
2、每个数据包的大小在限制64k内
3、因为连接,是不可靠协议
4、不需要建立连接,速度快
聊天工具udp协议
步骤:
发送端:
1、定义sockte服务
2、提供数据并将数据封装到数据包
3、通过sockte的send方法将数据包发送出去
接收端:
1、定义sockte服务并监听端口
2、定义一个数据包,用于接收储存接受到的数据
4、通过数据包功能将这些不同数据取出
1、将数据及源和目的封装成数据包中,不需要建立连接
2、每个数据包的大小在限制64k内
3、因为连接,是不可靠协议
4、不需要建立连接,速度快
聊天工具udp协议
步骤:
发送端:
1、定义sockte服务
2、提供数据并将数据封装到数据包
3、通过sockte的send方法将数据包发送出去
接收端:
1、定义sockte服务并监听端口
2、定义一个数据包,用于接收储存接受到的数据
4、通过数据包功能将这些不同数据取出
/*
* udp实现网络聊天
* 使用多线程实现一个控制接收一个控制发送*/
class Send implements Runnable{
private DatagramSocket ds;
Send(DatagramSocket ds){
this.ds = ds;
}
public void run() {
try {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String len=null;
while((len=br.readLine())!=null){
if(len.equals("end"))
break;
byte[] buf = len.getBytes();
DatagramPacket pac =
new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.2.255"), 10003);
ds.send(pac);
}
} catch (Exception e) {
throw new RuntimeException("发送异常");
}
}
}
class recev implements Runnable{
private DatagramSocket rds ;
public recev(DatagramSocket rds) {
this.rds = rds;
}
public void run() {
try {
while(true){
byte[] buf = new byte[1024];
DatagramPacket rdpk = new DatagramPacket(buf, buf.length);
rds.receive(rdpk);
String ip = rdpk.getAddress().getHostAddress();
String count = new String(rdpk.getData(), 0, rdpk.getLength());
int port = rdpk.getPort();
System.out.println("来自:"+ip+"端口:"+port+"信息:"+count);
}
} catch (Exception e) {
throw new RuntimeException("接收异常");
}
}
}
public class Thred_UDP {
public static void main(String[] args) throws Exception{
DatagramSocket sds = new DatagramSocket();
DatagramSocket rds = new DatagramSocket(10003);
Send send = new Send(sds);
recev recev = new recev(rds);
Thread sendtThread = new Thread(send);
Thread recevThread = new Thread(recev);
sendtThread.start();
recevThread.start();
}
}
----------------------
ASP.Net+Android+IOS开发、
.Net培训、期待与您交流! ----------------------