今天学习了osi七层和socket模块
只需要了解的是物理层、数据链路层和网络层
重点的是传输层和socket模块
一、传输层协议
TCP:基于链接传输数据,可保证数据传输的完整性
链接的时候叫做三次握手:
就是客户端先往服务端发送请求看服务端能否接收到数据,第二部是服务端接收到客户端的请求后向客户端发送数据并给客户端一个小程序让客户端反应是否接收到了服务端的数据,最后客户端接受到服务端的小程序向服务端反应接受到了服务端的数据。
断开连接的时候叫做四次挥手:
与上面的三次握手差不多,就是服务端将小程序换成了一个大程序,不能将二次握手打包成一次,然后就有了四次挥手
二、socket模块
socket是什么?
翻译过来称为套接字
是对底层的 TCP IP UDP 等网络协议进行封装
使得上层的应用程序开发者,不用直接接触这复杂,丑陋的协议
对于程序员而言,他就是一个封装好的模块!
要完成网络通讯,只需要使用系统提供的socket模块就行
python中的socket
在使用socket的时候用户需要关心的是 ip地址,port端口,传输协议TCP/UDP,你要发送的数据data
在写网络编程的时候,必然是有两台代码,对应着客户端和服务器
使用socket来完成TCP通讯
应该先完成服务器的代码编写:
import socket
# 1.创建一个代表服务器的socket对象
s = socket.socket()
# 2.绑定端口号和IP地址
address = ('127.0.0.1',8080)
s.bind(adress)
print('服务器已启动!')
#3.开始监听这个端口
#5表示可以有5个处于半连接状态的连接 指的不是最大连接数
s.listen(5)
print('test')
#4. 接受连接请求
#该函数是阻塞的 会卡住程序的执行,必须等到有一个客户端进来才会继续执行
#返回元祖 第一个是代表客户端的socket对象 第二个代表客户端的地址信息
client,c_address = s.accept()
print('有一个连接已建立!')
print(c_address)
#给客户端发送数据
# 5.读写数据
res = client.recv(1024)
print(res)
# 6.关闭连接
s.close()
然后完成客户端的代码编写:
import socket
#1.创建客户端的socket对象
c = socket.socket()
#2.指定服务器的ip和port
server_address = ('127.0.0.1',8080)
#3.建立连接
c.connect(server_address)
#4.读写数据
#发送数据到服务器
c.send('hello 我是客户端!'.encode('utf-8'))
#5.关闭连接
c.close()