Java教程

19.网络编程

本文主要是介绍19.网络编程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

网络编程

CS应用程序:在双端开发过程中 实现信息在客户端和服务器端之间传输

网络编程三要素:

​ 1.协议:

​ UDP协议:无连接通信协议 不会去判断对方是否在线 不建立真正的逻辑连接

​ 缺点:安全性低 数据完整性低

​ 优点:消耗资源少 传输效率高 用于 音频 视频 电话电视会议

​ TCP/IP协议:安全性高 传输数据更完整

​ 三次握手机制:保证对方在线 建立真正连接

​ 第一次握手:客户端向服务器端发送请求

​ 第二次握手:服务器端回写信息给客户端

​ 第三次握手:客户端向服务器端发送请求

​ 以上流程正常完成 创建真正的连接(Socket对象)

​ 2.IP地址:

​ 确定服务器所在互联网中的网络地址

​ IPv4:一个32位的二进制数 分为四个字节 其中每个字节都是0-255之间的十进制整数 组合后有42亿个标识

​ IPv6:采用128位地址长度 每16个字节一组 分为8组十六进制 多到类似于全世界的沙子的数量

​ 3.端口号:

​ 各个服务在电脑中的标识 范围0-65535 自定义一般大于1024 例如 9999 8765

案例:用户输入用户名 服务器验证 是“Lily” 则返回客户端 “欢迎你 Lily”

服务器端 Server

		//开启main方法	
		//设置服务的端口号
		ServerSocket ss = new ServerSocket(9890);
		System.out.println("开启服务");
		//服务器端如何知道客户端发送了请求 一直监听9890这个端口号
		while(true) {
			//监听端口号 获取客户端使用的Socket对象
			Socket socket = ss.accept();
			//所有发送过来的信息 都在socket对象中 获取网络读入流
			InputStream is = socket.getInputStream();
			byte[] b = new byte[1024];
			int l = 0;
			String name = "";
			while((l=is.read(b))!=-1) {
				name +=new String(b,0,l);
			}
			
			System.out.println(name);
            
			//准备回写信息
			String message = "";
			if(name.equals("Lily")) {
				message = "欢迎你Lily";
			}else {
				message = "不 你不是Lily";
			}
			
			//使用网络写出流对象 写出信息
			OutputStream os = socket.getOutputStream();
			os.write(message.getBytes());
			//关闭写出流
			socket.shutdownOutput();//不推荐
		}

客户端 Client

		//创建Socket对象 定义要访问的电脑上的服务
		Socket socket = new Socket("localhost",9890);
		
		System.out.println("请输入姓名");
		String name = input.next();
		
		//获取网络写出流对象
		OutputStream os = socket.getOutputStream();
		os.write(name.getBytes());
		//关闭写出流
		socket.shutdownOutput();//不推荐
		
		//获取网络读入流对象
		InputStream is = socket.getInputStream();
		byte[] b = new byte[1024];
		int l =0;
		String message="";
		while((l=is.read(b))!=-1) {
			message += new String(b,0,l);
		}
		
		System.out.println(message);

案例:用户输入用户名 密码 服务器验证是不是张三 123

练习:上传图片

​ 客户端 本地读入流

​ 客户端 网络写出流

​ 服务器端 网络读入流

​ 服务器端 本地写出流

​ 服务器端 网络写出流

​ 客户端 网络读入流

注册练习:

​ 客户端 网络对象写出流 写出User

​ 服务器端 本地对象读入流 读入本机ArrayList au 判断用户名是否存在

​ 不存在

​ 服务器端 网络对象写出流 写出ResponseMessage String message=“注册失败 用户名已存在”;

​ 客户端 网络对象读入流

​ 存在

​ 服务器端 本地对象写出流 将更新后的新集合 写出

​ 服务器端 网络对象写出流 写出ResponseMessage String message=“注册成功”;

​ 客户端 网络对象读入流

登录练习:

​ 客户端网络对象写出流 User

​ 服务器端网络对象读入流+本地对象读入流

​ 存在

​ 服务器端 网络对象写出流 写出ResponseMessage String message=“登录成功”;

​ 客户端 网络对象读入流

​ 不存在

​ 服务器端 网络对象写出流 写出ResponseMessage String message=“登陆失败”;

​ 客户端 网络对象读入流

这篇关于19.网络编程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!