Python笔记_26_TCP/UDP协议_TCP协议

TCP/UDP协议:

  • TCP(Transmission Control Protocol)一种面向连接的、可靠的、传输层通信协议(比如:打电话)

    • 优点 : 可靠,稳定,传输完整稳定,不限制数据大小
    • 缺点 : 慢,效率低,占用系统资源高,一发一收都需要对方确认
    • 应用 :Web浏览器,电子邮件,文件传输,大量数据传输的场景
  • UDP(User Datagram Protocol)一种无连接的,不可靠的传输层通信协议(比如:发短信)

    • 优点 : 速度快,可以多人同时聊天,耗费资源少,不需要建立连接
    • 缺点 : 不稳定,不能保证每次数据都能接收
    • 应用 :IP电话,实时视频会议,聊天软件,少量数据传输的场景
  • 客户端和服务端在建立连接时 : 三次握手
    客户端和服务端在断开连接时 : 四次挥手

  • SYN 创建连接
    ACK 确认响应
    FIN 断开连接

三次握手:

在这里插入图片描述

四次挥手:

MSL为最大报文段生存时间
默认规定MSL为2分钟,但实际应用中常用的是30秒,1分钟和2分钟等。

在这里插入图片描述

整体缩略图

在这里插入图片描述

socket模块

socket的意义 : 通络通信过程中,信息拼接的工具(中文:套接字)

在这里插入图片描述

TCP协议

基本语法
  • server服务端
# ### socket 服务器
import socket
# 创建一个socket对象
sk = socket.socket()
# 绑定ip和端口(注册网络,让别人找到你)
# "127.0.0.1" 默认本机的ip
sk.bind(  ("127.0.0.1",9000)  )
# 开启监听 (等待别人连接服务器)
sk.listen()

'''
# 建立三次握手,建立连接 , 程序加了阻塞 ,
建立三次握手如果失败,程序不往下执行
'''
conn,addr = sk.accept()
print(conn,addr)
# 最大一次性接受1024个字节.程序再次加了阻塞,没有接收到数据,不会向下执行代码
msg = conn.recv(1024)
# 把字节流恢复成正常的字符串(解析字节流变成字符串)
print(msg.decode("utf-8"))

# 发送给客户端数据
conn.send(" 我真的好哟".encode("utf-8"))


# 执行四次挥手,断开连接
conn.close()
# 关闭socket对象,退还占用的端口号
sk.close()
  • client客户端
import socket

# 产生一个socket对象
sk = socket.socket()
sk.connect( ("127.0.0.1",9000) )

# 发送消息 (发送的是二进制字节流)
sk.send("你好么,我好哟".encode("utf-8"))

# 接受消息 (发送完之后,程序加阻塞,等待服务器回应的数据,最大接受1024个字节)
res = sk.recv(1024)
strvar = res.decode("utf-8")
print(strvar)

# 关闭连接
sk.close()
可循环发送消息可退出
  • server服务端
# ### 循环发消息
import socket
sk = socket.socket()
# 在网络中注册该主机
sk.bind( ("127.0.0.1",9001) )
# 监听端口
sk.listen()



while True:
	# 建立三次握手
	conn,addr = sk.accept()
	while True:
		res = conn.recv(1024)
		# 把字节流变成原本字符串
		res2 = res.decode("utf-8") 
		print(res2)
		strvar = input("你要发送给客户端什么消息呢?:")
		conn.send(strvar.encode("utf-8"))
		if strvar == "q":
			break

	# 执行四次挥手
	conn.close()

# 退还系统的9000端口
sk.close()

  • client客户端
import socket
sk = socket.socket()
sk.connect( ("127.0.0.1",9001) )



while True:
	strvar = input("请输入您要发送的消息").strip()
	# 发送的数据需要二进制字节流
	sk.send(strvar.encode("utf-8"))
	res = sk.recv(1024)	
	if res == b"q":
		break
	print(res.decode("utf-8"))
	
# 关闭连接
sk.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Python Socket服务器,以下是一些基本的学习笔记: 1. 创建Socket服务器 使用Python中的`socket`模块创建Socket服务器,可以使用`socket()`函数来创建一个Socket对象,如下所示: ```python import socket # 创建一个Socket对象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ``` 其中,第一个参数`AF_INET`表示使用IPv4地址族,第二个参数`SOCK_STREAM`表示使用TCP协议,如果使用UDP协议,则应该使用`SOCK_DGRAM`。 2. 绑定Socket服务器 在创建Socket对象之后,需要使用`bind()`方法将Socket对象和一个IP地址及端口号绑定在一起,如下所示: ```python # 绑定IP地址和端口号 server_socket.bind(('127.0.0.1', 8888)) ``` 其中,`bind()`方法的参数是一个元组,第一个元素是IP地址,第二个元素是端口号。 3. 监听Socket服务器 在绑定IP地址和端口号之后,需要使用`listen()`方法开始监听Socket服务器,如下所示: ```python # 开始监听 server_socket.listen(5) ``` 其中,`listen()`方法的参数表示最大连接数,即同时可以连接的客户端数量。 4. 接受客户端连接 当有客户端连接到Socket服务器时,需要使用`accept()`方法来接受客户端连接,如下所示: ```python # 接受客户端连接 client_socket, client_address = server_socket.accept() ``` 其中,`accept()`方法返回一个元组,第一个元素是客户端的Socket对象,第二个元素是客户端的IP地址和端口号。 5. 接收和发送数据 客户端连接到Socket服务器之后,就可以进行数据的接收和发送了,使用`recv()`方法接收客户端发送的数据,使用`send()`方法向客户端发送数据,如下所示: ```python # 接收客户端数据 data = client_socket.recv(1024) # 发送服务器数据 client_socket.send(b'Hello, client!') ``` 其中,`recv()`方法的参数表示接收数据的最大字节数,`send()`方法的参数是要发送的数据,需要将其转换为字节串。 6. 关闭Socket服务器 当与客户端的通信完成后,需要使用`close()`方法关闭Socket服务器,如下所示: ```python # 关闭Socket服务器 server_socket.close() ``` 以上是关于Python Socket服务器的一些基本学习笔记,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值