Day22 网络编程

Day22 网络编程

第一节:什么是计算机网络

什么是网络:

由点和线组成,表示诸多对象间的相互联系

什么是计算机网络:

为实现资源共享和信息传递,通过通信线路连接起来的若干主机(Host)

互联网:(Internet)点与点相连

万维网:(WWW – World Wide Web)端与端相连

物联网:( IoT - Internet of things) 物与物相连

网络编程:让计算机与计算机之间建立连接、进行通信。

第二节:网络模型

在这里插入图片描述

层介绍:

第一层:物理层为设备之间的数据通信提供传输信号和物理介质。(双绞线、光导纤维)
第二层:链路层在物理层上,通过规程或协议(差错控制)来控制传输数据的正确性。(MAC)
第三层:网络层负责定义了能够标识所有网络节点的逻辑地址。(IP地址)
第四层:传输层负责是否选择差错恢复协议、数据流重用、错误顺序重排。(TCP、UDP)
第五层:会话层负责使应用建立和维持会话,使通信在失效时继续恢复通信。(断点续传)
第六层:表示层负责定义转换数据格式及加密,允许选择以二进制或ASCII格式传输。
第七层:应用层负责文件访问和管理、可靠运输服务、远程操作服务。(HTTP、FTP、SMTP)

第三节:TCP/IP模型

在这里插入图片描述

层介绍:

第一层:接口层负责建立电路连接,是整个网络的物理基础,典型的协议包括以太网、ADSL等等。
第二层:网络层负责分配地址和传送二进制数据,主要协议是IP协议。
第三层:传输层负责传送文本数据,主要协议是TCP、UDP协议。
第四层:应用层负责传送各种最终形态的数据,是直接与用户打交道的层,典型协议是HTTP、FTP等。

第四节:TCP/UDP

TCP协议:Transmission Control Protocol 传输控制协议

是一种面向连接的、可靠的、基于字节流的传输层通信协议。数据大小无限制。建立连接的过程需要三次握手,断开连接的过程需要四次挥手。



UDP协议:User Datagram Protocol 用户数据报协议

是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,每个包的大小64KB。

第五节:IP

IP协议:Internet Protocol Address 互联网协议地址/网际协议地址
分配给互联网设备的数字标签(唯一标识)。

IP地址分为两种:
IPV4:4字节32位整数,并分成4段8位的二进制数,每8位之间用圆点隔开,每8位	        整数可以转换为一个0~255的十进制整数。
  格式:D.D.D.D	例如:255.255.255.255
IPV6:16字节128位整数,并分成8段十六进制数,每16位之间用圆点隔开,每16	        	        位整数可以转换为一个0~65535的十进制数。
         格式:X.X.X.X.X.X.X.X	例如:FFFF.FFFF.FFFF.FFFF.FFFF.FFFF.FFFF.FFFF

IPV4的分类:

A类:政府机构,1.0.0.1 ~ 126.255.255.254

B类:中型企业,128.0.0.1 ~ 191.255.255.254

C类:个人用户,192.0.0.1 ~ 223.255.255.254

D类:用于组播,224.0.0.1 ~ 239.255.255.254

E类:用于实验,240.0.0.1 ~ 255.255.255.254

回环地址:127.0.0.1,localhost,指本机,一般用于测试使用。

查看IP命令:ipconfig

测试IP命令:ping D.D.D.D

Port 端口

端口号:在通信实体上进行网络通讯的程序的唯一标识。
端口分类:
公认端口:0~1023
注册端口:1024~49151
动态或私有端口:49152~65535
常用端口:
MySql:3306
Oracle:1521
Tomcat:8080
SMTP:25
Web服务器:80
FTP服务器:21

第六节:InetAddress类

概念:表示互联网协议(IP)地址对象,封装了与该IP地址相关的所有信息,并提供获取信息的常用方法。

方法:
public static InetAddress getLocalHost() 获得本地主机地址对象
public static InetAddress getByName(String host) 根据主机名称获得地址对象
public static InetAddress[] getAllByName(String host) 获得所有相关地址对象
public String getHostAddress() 获取IP地址字符串
public String getHostName() 获得IP地址主机名


示例代码:
InetAddress ip = InetAddress.getLocalHost();//本机
		System.out.println(ip.getHostName());//主机名
		System.out.println(ip.getHostAddress());//主机地址
		
		
		//获取别的
//		InetAddress baidu = InetAddress.getByName("www.baidu.com");
//		System.out.println(baidu.getHostAddress());//百度地址
//		System.out.println(baidu.getHostName());
		
//		InetAddress[] baidus =InetAddress.getAllByName("www.baidu.com");
//		System.out.println(baidus.length);
//		
//		for (InetAddress inetAddress : baidus) {
//			System.out.println(inetAddress.getHostAddress());
//		}
		System.out.println(InetAddress.getByName("www.google.com").getHostAddress());

第七节:Socket编程

Socket编程:
Socket(套接字)是网络中的一个通信节点。
分为客户端Socket与服务器ServerSocket。
通信要求:IP地址 + 端口号。
开发步骤:
建立通信连接(会话):
创建ServerSocket,指定端口号
调用accept等待客户端接入
客户端请求服务器:
创建Socket,指定服务器IP + 端口号
使用输出流,发送请求数据给服务器
使用输入流,接收响应数据到客户端(等待)
服务器响应客户端:
使用输入流,接收请求数据到服务器(等待)
使用输出流,发送响应数据给客户端

示例代码:
客户端:

	//客户端,指定要连接的IP地址和端口号
		Socket socket = new Socket("127.0.0.1",6666);
			//客户端角度:输出流---->服务端
			PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
			//客户端发送请求内容:  用户名和密码
			Scanner sc =new Scanner(System.in);
			System.out.println("请输入用户名:");
			String username = sc.next();
			System.out.println("请输入密码:");
			String password = sc.next();
			
			String content = username+":"+password;
			//通过输出流  写我的内容 到服务器端
			pw.print(content);
			pw.flush();
			socket.shutdownOutput();
			//通过输入流,获取服务器端返回的结果
			InputStream is = socket.getInputStream();
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader br = new BufferedReader(isr);
			String result = br.readLine();
			System.out.println("客户端说:服务器端给了个结果:"+result);
			socket.shutdownInput();
		
			br.close();
			socket.close();

服务端

System.out.println("服务启动。。。。。。");
		
			//创建服务端  端口为6666
			ServerSocket server  = new ServerSocket(6666);
			
			//客户端
			Socket socket = server.accept();//监听是否有客户端接入,如果没有,等待
			//服务器角度:输入流<-----   客户端
			BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			//从流中读取客户端发送来的内容
			String s = br.readLine();
			HashMap<String, String> maps = new HashMap<String ,String>();
			//aqiang:123456 对传递过来的字符串 通过指定符号做拆分两段,存放数组里
			String[] ss = s.split(":");
			for(String key : ss){
				maps.put(ss[0],ss[1]);
			}
			String result = "登录失败";
			if("aqiang".equals(ss[0])&& "123456".equals(maps.get(ss[0]))){
				result = "登录成功";
			}
			//关闭输入流
			socket.shutdownInput();
			//流 来对客户端做响应!
			OutputStream os = socket.getOutputStream();
			OutputStreamWriter wr = new OutputStreamWriter(os);
			PrintWriter pw= new PrintWriter(wr);
			//把验证结果打印给客户端
			pw.print(result);
			pw.flush();
			//关闭所有输出流
			socket.shutdownOutput();
			socket.close();
			server.close();

wr = new OutputStreamWriter(os);

  	PrintWriter pw= new PrintWriter(wr);
  	//把验证结果打印给客户端
  	pw.print(result);
  	pw.flush();
  	//关闭所有输出流
  	socket.shutdownOutput();
  	socket.close();
  	server.close();


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值