第一章 网络编程基础知识
1、两种软件架构
A、BS架构
a.含义
B:Browser浏览器
S:Server服务器
b.举例
某猫、某东、度娘
c.特点
直接使用浏览器,访问网站,就可以进去
B、CS架构
a.含义
C:Client客户端
S:Server服务器
b.举例
企鹅、企鹅音乐、撸啊撸
c.特点
需要下载客户端,安装客户端,才能使用
2、网络编程三要素
A、IP地址 (ipv4和ipv6)
a.查看IP地址的指令 ipconfig
b.本地默认IP地址 127.0.0.1
B、端口号
a. 端口号 范围是 0~65535
b. 其中 0~1024 属于系统端口,不要使用
C、通信协议
a.TCP协议
传输数据大
安全性高
速度慢
b.UDP协议
传输数据小 64KB
安全性低
速度快
第二章 TCP通信流程
1、客户端(发送数据)操作步骤
A. Socket clickSocket = new Socket("IP地址",端口号); //创建Socket的对象
B. OutputStream os = clickSocket.getOutputStream(); //获取IO流对象(输出)
C. os.write("需要写入的数据"); //写数据,可以进行流的增强
D. os.close(); //释放资源
2、服务端(接收数据)操作步骤
A. ServerSocket serverSocket = new ServerSocket(端口号); //创建ServerScoket对象
B. Socket clientSocket = serverSocket.accept(); //连接客户端Socket对象
C. InputStream is = clickSocket.getInputStream(); //获取IO流对象(输入)
D. int ch = is.read(); //读数据,可以进行流的增强
E. is.close(); //释放资源
3、服务端(回复数据)操作步骤
A. OutputStream os = clientSocket.getOutputStream(); //获取IO流对象(输出)
B. os.write("需要写回的数据"); //写数据,可以进行增强流
C. os.close(); //释放资源
D. clickSocket.close(); //关闭客户端socket
4、客户端(接收数据)操作步骤
A. InputStream is = clickSocket.getInputStream(); //获取IO流对象(输入)
B. int ch = is.read(); //读数据 可以进行流的增强
C. is.close(); //释放资源
D. clickSocket.close(); //关闭客户端socket
5、注意事项
A.采用 BufferedReader 和 BufferedWriter 进行读写操作.
BufferedWriter 每次写完一个数据,需要换行和刷新.才能被 BufferedReader 读取得到
原因是: BufferedReader 采用 readLine()读取数据的结束条件是 "遇到换行符结束"
B.客户端的 Socket 和 服务端获取客户端Socket要匹配上
客户端的 Socket ----- 匹配到 ---> 服务端的 serverSocket.accept();
第三章 一些优化问题
1、相关代码的优化处理
A、服务端文件以毫秒值命名的处理问题
long time = System.currentTimeMillis();
B、客户端通知服务器数据书写完毕
clickSocket.shutdownOutput();
2、多线程版本服务端优化
//获取服务端的ServerSocket的对象
ServerSocket serverSocket = new ServerSocket(端口号);
//死循环.不断的开启获取单独客户端的连接
while(true){
//获取客户端的Socket
Socket clientSocket = serverSocket.accept();
//开启线程,可以采用lambda表达式
new Thread(()->{
try{
//编写以前的代码.获取IO流对象...释放资源
}catch(IOException e){
e.printStackTrace();
}
}).start();
}