Java基础进阶Day11

Java基础进阶Day11

课程大纲

1、网络编程基础知识 --------------------> 了解(两种架构、三种要素)
2、TCP通信流程 -------------------------> 重点(理解服务端和客户端交互流程步骤)
3、文件上传综合案例 --------------------> 理解(理解代码实现步骤,注意点)

第一章 网络编程基础知识

1、两种软件架构(核心由javaweb阶段介绍)
A、BS架构 
	a.含义
		B:Browser浏览器
		S:Server服务器
	b.举例
		淘宝网站、京东商城、博学谷、百度搜索、CSDN论坛、网页小游戏
	c.特点
		直接使用浏览器,访问网站,就可以进去
		
B、CS架构 
	a.含义
		C:Client客户端
		S:Server服务器
	b.举例
		QQ软件、迅雷软件、酷狗音乐、LOL游戏
	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、图片文件上传服务器、基础版本的代码流程
客户端硬盘文件 -> 文件读取 -> 客户端写出 -> 服务端读取 -> 服务端写出 -> 服务端硬盘文件
2、相关代码的优化处理
A、服务端文件以毫秒值命名的处理问题
	  long time = System.currentTimeMillis();

B、客户端通知服务器数据书写完毕
	  clickSocket.shutdownOutput();
3、多线程版本服务端优化
//获取服务端的ServerSocket的对象
ServerSocket serverSocket = new ServerSocket(端口号);
//死循环.不断的开启获取单独客户端的连接
while(true){
        //获取客户端的Socket
        Socket clientSocket = serverSocket.accept();
        //开启线程,可以采用lambda表达式
        new Thread(()->{ 
                try{
                    //编写以前的代码.获取IO流对象...释放资源
                }catch(IOException e){
                    e.printStackTrace();
                } 
        }).start();
}

猜你喜欢

转载自blog.csdn.net/weixin_43904518/article/details/85175673