------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
1.采用UDP协议编写,发送端
概述:
lDatagramSocket与DatagramPacket
l建立发送端,接收端。
l建立数据包。
l调用Socket的发送接收方法。
l关闭Socket。
发送端与接收端是两个独立的运行程序
概述总结:
UDP 不需要连接,速度快,每个数据包的大小限制在64k内,不安全,有可能丢失文件
TCP 需要建立连接,通过三次握手完成连接,速度稍慢,连接中不限制数据包的大小, 但是安全
在注重速度的时候使用UDP---》如:视频聊天时
在注重安全的时候使用TCP---》如:下载文件时
*/
*
*步骤:
* 1, 创建Socket对象
* 类 DatagramSocket: 此类表示用来发送和接收数据报包的套接字
* 构造方法:
* DatagramSocket() 创建默认的Socket对象, 发送端
DatagramSocket(int port) 创建指定接收端口的Socket对象, 接收端
*
* 2, 准备要发送的数据
* 3, 封装数据成 数据包
* 类 DatagramPacket : 此类表示数据报包
* 构造方法:
* public DatagramPacket(byte[] buf,
int length,
InetAddress address,
int port)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号
* 4, 发送数据
* public void send(DatagramPacket p)
throws IOException从此套接字发送数据报包
5,关闭流
例:
public class UDPSend {
public static void main(String[] args) throws IOException {
//1, 创建DatagramSocket对象
DatagramSocket ds = new DatagramSocket();
//2, 准备要发送的数据
byte[] data = "地沟油".getBytes();
//3, 封装数据成 数据包
DatagramPacket dp = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.35.85"), 12306);
//4, 发送数据
ds.send(dp);
//关闭流
ds.close();
}
2. UDP协议的接收端代码
*
* 步骤:
* 1,创建DatagramSocket对象(港口)
* DatagramSocket(int port) 创建指定接收端口的Socket对象, 接收端
*
* 2,创建DatagramPacket对象(仓库)
* public DatagramPacket(byte[] buf, int length)
* 构造 DatagramPacket,用来接收长度为 length 的数据包。
* 3,接收数据到仓库
* public void receive(DatagramPacket p)
throws IOException从此套接字接收数据报包
* 4,从仓库中获取数据
* public InetAddress getAddress()返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的
* public byte[] getData()返回数据缓冲区。
* public int getLength()返回将要发送或接收到的数据的长度。
* 5,关闭流
例:
public class UDPReceive {
public static void main(String[] args) throws IOException {
1,创建DatagramSocket对象(港口)
DatagramSocket ds = new DatagramSocket(12306);
2,创建DatagramPacket对象(仓库)
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
3,接收数据到仓库
ds.receive(dp);
4,从仓库中获取数据
InetAddress address = dp.getAddress();
String ip = address.getHostAddress();//获取IP地址
byte[] data = dp.getData();//数据
int length = dp.getLength();//数据的长度
String dataStr = new String(data, 0, length);
//看一个接收到的数据
System.out.println( "ip = " + ip +", data = " + dataStr );
5,关闭流
ds.close();
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------