Python入门day36 —— TCP UDP通信

一:TCP基础版

服务端:

import socket

# 1.买手机
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    # 流式协议 ==> TCP协议
# socket.socket(socket.AF_INET, socket.SOCK_DGRAM)    # 数据报协议 ==> TCP协议

# 2.绑定手机卡 phone.bind(('127.0.0.1', 8081)) # 端口号建议用0-65535,因为0-1024被系统占用 # 3.开机 phone.listen(5) # 5指的是半连接池的大小 print('服务端启动完成,监听地址为:%s:%s' %('127.0.0.1',8080)) # 4.等待电话连接请求:拿到电话连接conn conn, client_addr = phone.accept() print(conn) print('客户端的IP和端口', client_addr) # 5.收\发消息 # 收消息 data = conn.recv(1024) # 最大接收的数据量为1024Bytes,收到的是Bytes类型 ==> 等同于二进制 print('客户端发来的消息:', data.decode('UTF-8')) # 发消息 conn.send(data.upper()) # 6.关闭电话连接conn conn.close() # 7.关机(可选) phone.close() 

客户端:

import socket

# 1.买手机
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.拨通服务端电话 phone.connect(('127.0.0.1', 8081)) # 3.通信 import time time.sleep(3) phone.send('hello egon 哈哈哈'.encode('utf-8')) data = phone.recv(1024) print(data.decode('utf-8')) # 4.关闭连接(必选的回收资源的操作) phone.close() 

二:TCP进阶版(加通信循环)

服务端:

import socket

# 1.买手机
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 流式协议=》tcp协议

# 2.绑定手机卡
phone.bind(('127.0.0.1', 8083)) # 0-65535, 1024以前的都被系统保留使用 # 3.开机 phone.listen(5) # 5指的是半连接池的大小 print('服务端启动完成,监听地址为:%s:%s' % ('127.0.0.1', 8080)) # 4.等待电话连接请求:拿到电话连接conn conn, client_addr = phone.accept() # 5.通信:收\发消息 while True: try: data = conn.recv(1024) # 最大接收的数据量为1024Bytes,收到的是bytes类型 if len(data) == 0: # 在unix系统洗,一旦data收到的是空 # 意味着是一种异常的行为:客户度非法断开了链接 break print("客户端发来的消息:", data.decode('utf-8')) conn.send(data.upper()) except Exception: # 针对windows系统 break # 6.关闭电话连接conn(必选的回收资源的操作) conn.close() # 7.关机(可选操作) phone.close() 

客户端:

import socket

# 1.买手机
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 流式协议=》tcp协议

# 2.拨通服务端电话
phone.connect(('127.0.0.1', 8083)) # 3.通信 while True: msg = input("输入要发送的消息>>>: ").strip() # msg='' if len(msg) == 0: continue phone.send(msg.encode('utf-8')) print('======发送成功') data = phone.recv(1024) print(data.decode('utf-8')) # 4.关闭连接(必选的回收资源的操作) phone.close() 

三:TCP高阶版(加上链接循环)

服务端:

# 服务端应该满足的特点:
# 1、一直提供服务
# 2、并发地提供服务
import socket

# 1、买手机 phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 流式协议=》tcp协议 # 2、绑定手机卡 phone.bind(('127.0.0.1', 8080)) # 0-65535, 1024以前的都被系统保留使用 # 3、开机 phone.listen(5) # 5指的是半连接池的大小 print('服务端启动完成,监听地址为:%s:%s' % ('127.0.0.1', 8080)) # 4、等待电话连接请求:拿到电话连接conn # 加上链接循环 while True: conn, client_addr = phone.accept() # 5、通信:收\发消息 while True: try: data = conn.recv(1024) # 最大接收的数据量为1024Bytes,收到的是bytes类型 if len(data) == 0: # 在unix系统洗,一旦data收到的是空 # 意味着是一种异常的行为:客户度非法断开了链接 break print("客户端发来的消息:", data.decode('utf-8')) conn.send(data.upper()) except Exception: # 针对windows系统 break # 6、关闭电话连接conn(必选的回收资源的操作) conn.close() # 7、关机(可选操作) phone.close() 

客户端:

import socket

# 1、买手机
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 流式协议=》tcp协议

# 2、拨通服务端电话
phone.connect(('127.0.0.1', 8080)) # 3、通信 while True: msg = input("输入要发送的消息>>>: ").strip() # msg='' if len(msg) == 0: continue phone.send(msg.encode('utf-8')) print('======?') data = phone.recv(1024) print(data.decode('utf-8')) # 4、关闭连接(必选的回收资源的操作) phone.close() 

四:UDP协议的套接字通信

服务端:

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # 数据报协议=》udp协议

server.bind(('127.0.0.1', 8081)) while True: data, client_addr = server.recvfrom(1024) server.sendto(data.upper(), client_addr) # server.close() 

客户端:

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # 流式协议=》tcp协议

while True:
    msg = input('>>>: ').strip() client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8081)) res = client.recvfrom(1024) print(res) client.close()

猜你喜欢

转载自www.cnblogs.com/yding/p/12739888.html