import java.net.*;
class UdpDemo
{
public static void main(String[] args) throws Exception
{
/*
建立发送端的Socket对象
*/
DatagramSocket ds=new DatagramSocket();
/*
要封装,先要有数据。Socket传输的是字节数组。
*/
byte [] buf="abcde".getBytes();//String类的静态函数getBytes()返回的是一个字节数组。
/*
将数据封装成包。DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
*/
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("119.75.218.77"),10000);
/*
发送数据包。
*/
ds.send(dp);
/*
关闭资源
*/
ds.close();
}
}
/*
需求:建立一个程序,接受UDP协议传输的数据并处理。
思路:
1,定义一个接收端的Socket接口。
2,定义一个数据包,存储接收到的字节数据。数据包中有更多功能提取字节数据中的不同信息因为端口接受到的不是数据包,而是已经被解压过了的数据。数据包被层层剥开,
剩下数据源和接受端的信息。端口要接受这些数据,就用一个包把它们封装起来。好比某人收到一束鲜花,她验货时拆开原包装,它装饰的时候,自己要用一个容器把花放起来。
3,通过Socket类的receive方法将收到的数据存入已定义好的数据包中。
4,通过数据包的功能方法将不同数据取出。
5,关闭资源。
*/
class UdpReceive
{
public static void main(String[] args) throws Exception
{
//建立UDP端口,定义Socket
DatagramSocket ds=new DatagramSocket(10000);
/*
定义
*/
byte [] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
ds.receive(dp);
//用数据包的方法获取字节数组中的信息。
String ip=dp.getAddress().getHostAddress();
String data= new String(dp.getData(),0,dp.getLength());
int port=dp.getPort();
System.out.println(ip+"::"+data+"::"+port);
ds.close();
}
}
运行UdpDemo 和UdpReceive后没显示数据,请帮我看看能不能在你的电脑上传输数据 |
|