0.基础知识
0.1 UDP: User Datagram Protocol
用户数据报协议,面向无连接协议
无连接无状态的通讯协议
不保证可靠的数据传输
速度快,也可以在较差网络下使用
发送方发送消息,如果接收方刚好在目的地,则可以接受。如果不在,那这个消息就丢失了
发送方也无法得知是否发送成功
UDP的好处就是简单,节省,经济
0.2 DatagramSocket:通讯的数据管道
send 和receive方法
(可选,多网卡)绑定一个IP和Port
0.3 DatagramPacket
集装箱:封装数据
地址标签:目的地IP+Port
1.example
import java.net.*;
public class UdpRecv
{
public static void main(String[] args) throws Exception
{
//接收信息的时候直接把端口写上了
DatagramSocket ds=new DatagramSocket(3000);
byte [] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,1024);
System.out.println("UdpRecv: 我在等待信息");
ds.receive(dp);
System.out.println("UdpRecv: 我接收到信息");
String strRecv=new String(dp.getData(),0,dp.getLength()) +
" from " + dp.getAddress().getHostAddress()+":"+dp.getPort();
System.out.println(strRecv);
Thread.sleep(1000);
System.out.println("UdpRecv: 我要发送信息");
String str="hello world 222";
DatagramPacket dp2=new DatagramPacket(str.getBytes(),str.length(),
InetAddress.getByName("127.0.0.1"),dp.getPort());
ds.send(dp2);
System.out.println("UdpRecv: 我发送信息结束");
ds.close();
}
}
import java.net.*;
public class UdpSend
{
public static void main(String [] args) throws Exception
{
DatagramSocket ds=new DatagramSocket();
String str="hello world";
//把数据装箱
DatagramPacket dp=new DatagramPacket(str.getBytes(),str.length(),
InetAddress.getByName("127.0.0.1"),3000);
System.out.println("UdpSend: 我要发送信息");
ds.send(dp);//用通讯的数据管道发送已经装箱的信息
System.out.println("UdpSend: 我发送信息结束");
Thread.sleep(1000);
byte [] buf=new byte[1024];
DatagramPacket dp2=new DatagramPacket(buf,1024);
System.out.println("UdpSend: 我在等待信息");
ds.receive(dp2);
System.out.println("UdpSend: 我接收到信息");
String str2=new String(dp2.getData(),0,dp2.getLength()) +
" from " + dp2.getAddress().getHostAddress()+":"+dp2.getPort();
System.out.println(str2);
ds.close();
}