一.基本概念
- List item
1.传输层为应用层服务,通过套接口(socket)。
2.传输层协议:
- TCP:面向连接,可靠,安全,
- UDP:无连接,不可靠,丢包,效率高
二.SOCKET编程
1.基于UDP的套接口编程
- 数据小于60k
- 无连接,不安全,效率高
- 数据包写好目的地址,不需IO流来实现数据传输
java类中现成的类直接用: - DatagramSocket:用于发送/接收数据包的套接字。
- DatagramPacket:数据包
2.实现 - 发送端-客户端
1.使用DatagramSocket 指定端口 创建发送端
2.准备数据 一定转成字节数组
3.封装成DatagramPacket包裹,指定目的地
4.发送包裹send(DatagramPacket p)
5.释放资源
public class UdpClient {
public static void main(String[] args) throws Exception {
System.out.println("发送方启动中。。。");
//1.使用DatagramSocket 指定端口 创建发送端
DatagramSocket client=new DatagramSocket(8888);
//2.准备数据 一定转成字节数组
String data="上海尚学堂";
byte[] datas=data.getBytes();
//3.封装成DatagramPacket包裹,指定目的地
DatagramPacket packet=new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",9999));
//4.发送包裹send(DatagramPacket p)
client.send(packet);
// 5.释放资源
client.close();
}
}
- 接收端-服务器
Address already in use: Cannot bind 同一个协议下端口不允许重复
1.使用DatagramSocket 指定端口 创建接收端
2.准备容器 封装成DatagramPacket包裹
3.阻塞式接收包裹recevie(DatagramPacket p)
4.分析数据(还原回字节数组)
byte[] getData()
getLength()
5.释放资源
public class UdpServer {
public static void main(String[] args) throws Exception {
System.out.println("接收方启动中。。");
//1.使用DatagramSocket 指定端口 创建接收端
DatagramSocket server=new DatagramSocket(9999);
//2.准备容器 封装成DatagramPacket包裹
byte[] comtainer=new byte[1024*60];
DatagramPacket packet=new DatagramPacket(comtainer,0,comtainer.length);
// 3.阻塞式接收包裹recevie(DatagramPacket p)
server.receive(packet);
// 4.分析数据
// byte[] getData()
// getLength()
byte[] datas=packet.getData();
int len=packet.getLength();
System.out.println(new String(datas,0,len));
// 5.释放资源
server.close();
}
}
3.注意:
发送端:要把准备的数据转成字节数组再打包
接收端:将接收到的包,拆包,转成字节数组。
那么需要注意了,如果传输的是3.14这样的小数或者对象,图片呢
3.14采用Data流
对象使用对象流:对象的 序列化和反序列化
图片:文件输入输出流
也就是说需要结合IO相关知识来进行。
!!!!