大龄屌丝自学笔记Java零基础到菜鸟038

网络模型、要素,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();  //释放资源
原文地址:https://www.cnblogs.com/liverpool/p/4918311.html