网络模型、要素,Socket,UDP,TCP
1、网络模型
OSI:Open System Interconnectopn,开放系统互连。
【物理层】-【数据链路层】-【网络层】-【传输层】-【会话层】-【表示层】-【应用层】
TCP/IP:
【主机至网络层】-----------【网际层】-【传输层】-【应用层】
2、要素
网络编程三要素:IP地址,端口,协议。
UDP协议:数据打包不建立连接,数据有限制,效率高,不可靠。(类似发短信)
TCP协议:建立数据通道,数据无限制,效率低,可靠。(类似打电话)
InetAddress类(IP地址对象类)
3、Socket
Socket套接字:网络上具有唯一标识的IP地址和端口号组合在一起,构成唯一能被识别的标识符套接字。
Socket原理机制:通信两端都有Socket对象,且所有通信都是通过Socket间的IO流进行操作。
4、UDP
接收:【创建UDP接收端Socket对象】-【创建用于接收数据的数据包】-【接收数据】-【解析数据包】-【释放资源】
发送:【创建UDP发送端Socket对象】-【创建数据并打包】-【发送数据】-【释放资源】
DatagramSocket类,DatagramPacket类
1 //接收 2 DatagramSocket ds = new DatagramSocket(10086); //创建接收端Socket对象 3 byte[] bys = new byte[1024]; //创建数据 4 int length = bys.length; //长度 5 DatagramPacket dp = new DatagramPacket(bys,length) //用于接受数据的数据包(容器) 6 ds.receive(dp); //接收数据 7 byte[] bys2 = dp.getData(); //解析数据 8 System.out.println(new String(bys2,0,bys2.length)); //输出 9 ds.close(); //释放资源 10 11 //发送 12 DatagramSocket ds = new DatagramSocket(); //创建发送端Socket对象 13 byte[] bys = "Hello World".getBytes(); //创建数据 14 int length = bys.length; //长度 15 InetAddress address = InetAddress.getByName("192.168.12.34"); //IP地址 16 int port = 10086; //端口 17 DatagramPacket dp = new DatagramPacket(bys,length,address,port) //数据打包 18 ds.send(dp); //发送数据 19 ds.close(); //释放资源
5、TCP
接收:【创建TCP服务端Socket对象】-【监听客户端连接】-【获取输入流,读数据】-【释放资源】
发送:【创建TCP客户端Socket对象】-【获取输出流,写数据】-【释放资源】
Socket类,ServerSocket类
1 //接收 2 ServerSocket ss = new ServerSocket(8888); //创建服务端Socket对象 3 Socket s = ss.accept(); //监听 4 InputStream is = new s.getInputStream(); //输入流 5 byte[] bys = new byte[1024]; //创建数据 6 int len = is.read(bys); //长度 7 String str = new String(bys,0,len); //读数据 8 System.out.println(str); //输出 9 s.close(); //释放资源 10 11 //发送 12 InetAddress address = new InetAddress.getByName("192.168.12.34"); //IP地址 13 int port = 8888; //端口 14 Socket s = new Socket(address,port); //创建客户端Socket对象 15 OutputStream os = new s.getOutputStream(); //输出流 16 os.write("Hello World".getBytes()); //写数据 17 s.close(); //释放资源