引言
👉诸事静心即可, 毕竟不可能万事如意;
👉我早上起不来不是因为起不来,是因为喜欢回笼觉,淦;
👉距离开学还有39天,我还是没有底气去应对;
👉买基金涨了10%,果断卖了,不能贪心;
知识点总结
网络编程概念
网络编程就是通过程序使得互联网中的两台设备之间进行数据传输。
网络结构模式
C/S
Client/Server,指客户端对服务器;像我们平时用的QQ,Wechat,Alipay就是我们通过下载客户端来访问服务器,进行数据传输。
B/S
Browser/Server,指浏览器对服务器;像Chrome,Firefox,Safari就是通过浏览器访问服务器的。
网络编程三要素
- 网络通信协议
- IP地址
- 端口号
网络通信协议
通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信。
TCP/IP协议
TCP/IP是互联网相关的各类协议族的总称,如TCP,UDP,IP,FTP,HTTP等都属于TCP/IP族内的协议。
TCP
传输控制协议 (Transmission Control Protocol)。TCP协议是面向连接的通信协议,即在传输之前要对传输设备之间进行连接;它的特点是可靠无差错;适用于对文件下载等传输。
三次握手
在TCP协议的准备阶段,客户端和服务端要经历三次握手,以确保连接成功。
- 第一次握手:客户端向服务端发送连接请求,等待服务端回应;
- 第二次握手:服务器端向客户端发送一个回应,告知连接成功;
- 第三次握手:客户端再一次向服务器端发送确认消息,确认连接成功;
UDP
用户数据报协议(User Datagram Protocol)。UDP是一种无连接协议,它不知道发送的数据是否平安到达,所以可能会有丢失的情况;常用于视频会议,语言聊天等场景。
IP地址
把计算机比作电话的话,IP地址就是手机号;
IPV4
是一个32位的二进制数,通常被分为4个字节,如192.168.1.1;每八位用十进制来表示;每个字节的范围是0~255;
eg 192. 168. 1. 1
11000000 10101000 00000001 00000001
IPV6
IPv6的地址长度为128位,是IPv4地址长度的4倍。采用十六进制表示。分成八组十六进制数;
127.0.0.1和localhost表示的都是本地地址;
端口号
用两个字节表示的整数,它的取值范围是0~65535。客户机可以通过IP地址找到服务器端,但是服务器端有很多端口的;根据端口号才能准确的传输数据。
常用端口号
80 : 网络端口
3306:mysql数据库端口
8080:Tomcat服务器端口
TCP通信
通信两端分为客户端(Client)和服务端(Server);
通信步骤
1.服务端启动,等待客户端连接;
2.客户端主动连接服务端;
Java实现通信步骤
Java.net中的Socket类表示客户端;ServerSocket类表示服务端;
Socket类
该类实现客户端套接字(也称为“套接字”); 套接字是两台机器之间通讯的端点。
构造方法
1.Socket()
创建一个未连接的套接字,并使用系统默认类型的SocketImpl。
2.Socket(String address, int port)
创建流套接字并将其连接到指定服务器的指定IP地址和端口号。
常用方法
1.getInputStream()
返回此套接字的输入流。
2.getOutputStream()
返回此套接字的输出流。
3.close()
关闭此套接字。
使用步骤
1.创建一个Socket对象,构造方法中声明连接的服务器的IP地址和端口号;
2.使用getOutputStream()方法,获取网络字节输出流;
3.使用网络字节输出流向服务器端传输数据;
4.使用getInputStream()方法,获取网络字节输入流;
5.使用网络字节输入流获取服务器端传来的回应数据;
6.释放资源(Socket);
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Demo01Client {
public static void main(String[] args) throws IOException {
Socket sc=new Socket("127.0.0.1",1288);
OutputStream os = sc.getOutputStream();
os.write("你好,服务端".getBytes());
InputStream inputStream = sc.getInputStream();
byte[] bt=new byte[1024];
int len=inputStream.read(bt);
System.out.println(new String(bt,0,len));
sc.close();
}
}
ServerSocket
与Socket类十分相似;
构造方法
1.ServerSocket()
创建一个未连接的套接字,并使用系统默认类型的SocketImpl。
2.ServerSocket(int port)
创建流套接字并将其绑定到指定端口号。
常用方法
1.getInputStream()
返回此套接字的输入流。
2.getOutputStream()
返回此套接字的输出流。
**3.Socket accept()
侦听要连接到此套接字并接受它。
使用步骤
1.创建一个ServerSocket对象,构造方法中声明端口号;
2.用accept()方法创建一个Socket对象;
使用getIntputStream()方法,获取网络字节输入流;
3.使用网络字节输入流读取客户端传输的数据;
4.使用getOuputStream()方法,获取网络字节输出流;
5.使用网络字节输出流向服务器端传输回应数据;
6.释放资源(Socket,ServerSocket);
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Demo01Serve {
public static void main(String[] args) throws IOException {
ServerSocket ss=new ServerSocket(1288);
Socket accept = ss.accept();
InputStream is = accept.getInputStream();
byte[] bt=new byte[1024];
int len=is.read(bt);
System.out.println(new String(bt,0,len));
OutputStream outputStream = accept.getOutputStream();
outputStream.write("收到了".getBytes());
accept.close();
ss.close();
}
}