网络学习笔记(TCP/I通信协议、TCP通信等)

网络

网络通信协议

要使计算机连成的网络能够互通信息,需要对数据传输速率、传输代码、代码结构、传输控制步骤、出错控制等制定一组标准,这一组共同遵守的通信标准就是网络通信协议,不同的计算机之间必须使用相同的通讯协议才能进行通信。

七层模型

七层模型,也称为OSI(Open System Interconnection)参考模型,是国际标准化组织(ISO)制定的一个用于计算机或通讯系统间互联的标准体系。它是一个七层的、抽象的模型体,不仅包括一系列抽象的术语或概念,也包括具体的协议。
ISO 就是 Internationalization Standard Organization(国际标准组织)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cYtCji5C-1661734006742)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823085931473.png)]

TCP/IP 协议

在Internet中TCP/IP协议是使用最为广泛的通讯协议。TCP/IP是英文Transmission Control Protocol/Internet Protocol的缩写,意思是“传输控制协议/网际协议”

**网络:**两台或多台电脑之间能够通信

广域网((WAN)外网), 就是我们通常所说的Internet,它是一个遍及全世界的网络。

局域网((LAN)内网),相对于广域网(WAN)而言,主要是指在小范围内的计算机互联网络。这个“小范围”可以是一个家庭,一所学校,一家公司,或者是一个政府部门。

TCP/IP协议 定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准

IP 电脑的一个唯一地址, 方便电脑之间通信,由四个字节组成, 每个字节使用 "."分割: 每一位的范围: 0~255

IP 地址分为五类:A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数据不同。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mCNygiEv-1661734006743)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823095748320.png)]

域名 使用域名(英文符号) 替换ip, 每个域名映射一个IP地址,例如百度域名www.baidu.com绑定了一个IP地址14.215.177.39, 访问百度: 根据ip访问

IP地址可以用于确定要与哪台电脑通信,底层:把域名转换为IP地址

端口 端口号, 0~65535个 , 具有网络功能的应用软件的标识号,可以指定要与这台电脑的哪个程序通信。 0-1023是公认端口号,即已经公认定义或为将要公认定义的软件保留的 ;1024-65535是并没有公共定义的端口号,用户可以自己定义这些端口的作用。

http: 默认端口: 80

https: 默认端口: 443

mysql的默认端口: 3306

端口: TCP: 0~65535 UDP:0~65535

TCP 面向连接的,可靠的,基于字节流的传输层协议; TCP通信的时,在发送数据之前, 与对方建立一个连接, ( TCP协议建立连接需要三次会话(握手),三次握手机制)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UuqKDiGP-1661734006744)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823093236623.png)]

TCP通信

Socket编程:

Socket (客户端的套接字)

ServerSocket(服务端的套接字(Socket))

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qYIfgtCT-1661734006746)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823103822975.png)]

当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器此时可以通过对 Socket 对象的写入和读取(字节流)来进行通信。

流式套接字: TCP, 面向连接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-baAQQ8Oo-1661734006746)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823105048585.png)]

核心类

ServerSocket: 服务器套接字, 等待客户端的连接

构造方法(绑定到指定端口)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-exxuFu0w-1661734006747)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823105301424.png)]

常用方法

侦听并接收到此ServerSocket的连接,此方法在连接传入之前一直阻塞

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xsjn10ld-1661734006748)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823105432115.png)]

监听端口,等待客户端的连接,一旦有客户端连接了, 得到一个与客户端一对一的Socket

Socket类

Socket的构造共有9种,这里介绍2种常用的构造方法:

构造方法 说明
Socket(String host, int port) 向host主机的port端口发起连接请求
[Socket](mk:@MSITStore:C:\DOCUME1\ADMINI1\LOCALS~1\Temp\Rar D I a 0.501 % 5 b J a v a 参考文档 DIa0.501\%5bJava参考文档%5d.JDK_API_1_6_zh_CN.CHM::/java/net/Socket.html#Socket(java.lang.String, int, java.net.InetAddress, int))([String](mk:@MSITStore:C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Rar DIa0.501%5bJava参考文档DIa0.501%5bJava参考文档%5d.JDK_API_1_6_zh_CN.CHM::/java/lang/String.html) host, int port, InetAddress localAddr, int localPort) 向host主机的port端口发起连接请求,发起请求的计算机为localAddr,端口为localPort

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-glLPeIhM-1661734006749)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823105552852.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9pNoMVQy-1661734006750)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823110444218.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YxEWLvqD-1661734006751)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823110559349.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U8Mz4jxd-1661734006752)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823110626378.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CqcNULqa-1661734006752)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823110637452.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZybEEgov-1661734006753)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823110637452.png)]

TCP通信步骤

服务器端

1:)创建一个ServerSocket

2:)调用accept(),等到客户端的连接

3:)得到客户端的Socket对象, 调用getInputStream() getOutputStream() 得到输入输出流

4:)输入流接收数据, 输出流发送数据

5:)关闭资源

客户端

1:)创建一个Socket, 请求服务器地址, 端口, 与服务器进行连接

2:)调用getInputStream() getOutputStream() 得到输入输出流

3:)输出流发送数据,输入流接收数据,

4:)关闭资源

启动顺序: 先启动服务器, 再启动客户端
服务端编程
public class Server {
    
    

	public static void main(String[] args) {
    
    
		ServerSocket server = null;
		Socket socket = null;
		try {
    
    
			//准备服务器端用的通讯对象(套接字),指明端口号为8888
			server = new ServerSocket(8888);
			//到指定端口去阻塞监听,一旦有客户端请求发送过来,那么立即自动与客户端建立连接
			socket = server.accept();
			System.out.println("服务器端准备ok");
            
			//我要发送到客户端的内容
			String msg = "你好,我是服务器,这是我的第一次通讯,请问你收到了吗";
			OutputStream os = socket.getOutputStream();//准备输出对象
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
			bw.write(msg);
			bw.newLine();
			bw.flush();
            
			//接收客户端发送的信息
			InputStream is = socket.getInputStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			String reply = br.readLine();
			System.out.println("我是服务器,接收到信息:"+reply);
			
			br.close();
			is.close();
			bw.close();
			os.close();
			socket.close();
			server.close();
		} catch (IOException e) {
    
    
			e.printStackTrace();
		}
	}
}
客户端编程
public class Client {
    
    

	public static void main(String[] args) {
    
    
		Socket socket = null;
		try {
    
    
			socket = new Socket("localhost", 8888);
			System.out.println("客户端准备完成");
			
			//客户端开始接受请求
			InputStream is = socket.getInputStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			String msg = br.readLine();
			System.out.println("我是客户端,接收到信息:"+msg);
			
			//客户端接收到服务器端的信息之后,需要反馈信息给服务器
       	 //客户端想要反馈给服务器端的信息 
			String reply = "我是客户端,收到你的信息,这是我的反馈";
			OutputStream os = socket.getOutputStream();//准备客户端的输出流
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
			bw.write(reply);
			bw.newLine();
			
			bw.flush();
			bw.close();
			os.close();
			br.close();
			is.close();
			socket.close();
		} catch (UnknownHostException e) {
    
    
			e.printStackTrace();
		} catch (IOException e) {
    
    
			e.printStackTrace();
		}
	}
}

idea设置一个程序运行多次

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XOJ58gpG-1661734006754)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823114549421.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NO1RPl2d-1661734006755)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823114719745.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nc0x4dS6-1661734006755)(D:\飞思实训三\博客\我的\15.网络\assets\image-20220823114752213.png)]

UDP通信

ception e) {
e.printStackTrace();
}
}
}




#### idea设置一个程序运行多次

[外链图片转存中...(img-XOJ58gpG-1661734006754)]

[外链图片转存中...(img-NO1RPl2d-1661734006755)]

[外链图片转存中...(img-Nc0x4dS6-1661734006755)]



## UDP通信

猜你喜欢

转载自blog.csdn.net/m0_48895748/article/details/126577685