Python中的Socket

客户端和服务端的简单实现

复制代码
- 服务端实现
python 复制代码
'''
网络变成与通信协议
通信协议:即规则,为了使全球不同类型的计算机都可以连接在一起,指定的一套全球通用的通信协议---Internet协议,任何私有网络,只要支持这个协议,就可以接入互联网
通信协议层级图:chap12/img.png

TCP/IP协议
IP协议是整个TCP/IP协议族的核心
IP地址就是互联网上计算机的唯一标识
目前的IP地址有两种表示方式,即IPV4和IPV6
在命令行下使用ipconfig命令可以查看本机的IP地址

TCP(Transmission Control Protocol)协议即传输控制协议,是建立在IP协议基础上的,TCP协议负责两台计算机之间练级可靠连接,保证数据包按顺序发送,它是一种可靠的,一对一的,面向有连接的通信协议

UDP协议又被称为用户数据报协议(User Datagram Protocol),它是面向无连接的协议,只要知道对方的IP地址和端口,就可以直接发送数据包,由于面向无连接的,所以无法保证数据一定会到达接收方

端口号:
区分计算机中的运行的应用程序的整数
端口号的取值范围是0到65535,一共65536个,其中80这个端口号分配给了HTTP服务,21这个端口号分配给了FTP服务


TCP协议与UDP协议的区别
                            TCP协议                               UDP协议
连接方面                    面向连接的                              面向无连接
安全方面                传输消息可靠,不丢失,按顺序到达                无法抱枕不丢包
传输效率方面               传输效率相对较低                          传输效率高
连接对象梳理方面            只能是点对点,一对一                       支持一对一,一对多,多对多的交互通信


Socket套接字
Socket对象的常用方法
方法名称:                 功能描述
bind((ip,port)):          绑定IP地址和端口
listen(N):              开始TCP监听,N表示操作系统挂起的最大连接数量,取值范围1-5之间,一般设置为5
accept():               被动接收TCP客户端连接,阻塞式
connect((ip,port)):       知道婆娘初始化TCP服务器连接
recv(size):             接收TCP数据,返回值为字符串类型,size表示要接受的最大数据量
send(str):              发送TCP数据,返回值是要发送的字节数量
sendall(str):           完整发送TCP数据,将str中的数据发送到连接的套接字,返回之前尝试发水平所有数据,如果成功为None,失败抛出异常
recvfrom():             接收UDP数据,返回值为一个元组(data,address),data表示接收的数据,address表示发送数据的套接字地址
sendto(data,(ip,port)): 发送UDP数据,返回值是发送的字节数
close:                  关闭


TCP编程-TCP服务器端流程如下:
1.使用socket类创建一个套接字对象
2.使用bind((ip,port))方法绑定IP地址和端口号
3.使用listen()方法开始TCP监听
4.使用accept()方法等待客户端的连接
5.使用recv()/send()方法接收/发送数据
6.使用close()关闭套接字
'''
from socket import socket, AF_INET, SOCK_STREAM

# AF_INET 用于Internet之间的进程通信
# SOCK_STREAM 表示的是用TCP协议编程

# 1.使用socket类创建一个套接字对象
service_socket = socket(AF_INET, SOCK_STREAM)
# 2.使用bind((ip,port))方法绑定IP地址和端口号
ip = '127.0.0.1'  # 本机ip
port = 8888  # 端口
service_socket.bind((ip, port))
# 3.使用listen()方法开始TCP监听
service_socket.listen(5)
print('服务器已经启动')
# 4.使用accept()方法等待客户端的连接
client_socket, client_address = service_socket.accept()
# 5.使用recv()/send()方法接收/发送数据
resp = client_socket.recv(1024)
data = resp.decode('utf-8')
print(f'客户端发送过来的数据为:{data}')
# 6.使用close()关闭套接字
service_socket.close()
'''
TCP客户端的流程如下:
1.使用socket类创建一个套接字对象
2.使用connect((ip,prot))设置连接的主机IP和主机设置的端口号
3.使用recv()/send()方法接收/发送数据
4.使用close()关闭套接字
'''
复制代码
- 客户端实现
python 复制代码
'''
网络变成与通信协议
通信协议:即规则,为了使全球不同类型的计算机都可以连接在一起,指定的一套全球通用的通信协议---Internet协议,任何私有网络,只要支持这个协议,就可以接入互联网
通信协议层级图:chap12/img.png

TCP/IP协议
IP协议是整个TCP/IP协议族的核心
IP地址就是互联网上计算机的唯一标识
目前的IP地址有两种表示方式,即IPV4和IPV6
在命令行下使用ipconfig命令可以查看本机的IP地址

TCP(Transmission Control Protocol)协议即传输控制协议,是建立在IP协议基础上的,TCP协议负责两台计算机之间练级可靠连接,保证数据包按顺序发送,它是一种可靠的,一对一的,面向有连接的通信协议

UDP协议又被称为用户数据报协议(User Datagram Protocol),它是面向无连接的协议,只要知道对方的IP地址和端口,就可以直接发送数据包,由于面向无连接的,所以无法保证数据一定会到达接收方

端口号:
区分计算机中的运行的应用程序的整数
端口号的取值范围是0到65535,一共65536个,其中80这个端口号分配给了HTTP服务,21这个端口号分配给了FTP服务


TCP协议与UDP协议的区别
                            TCP协议                               UDP协议
连接方面                    面向连接的                              面向无连接
安全方面                传输消息可靠,不丢失,按顺序到达                无法抱枕不丢包
传输效率方面               传输效率相对较低                          传输效率高
连接对象梳理方面            只能是点对点,一对一                       支持一对一,一对多,多对多的交互通信


Socket套接字
Socket对象的常用方法
方法名称:                 功能描述
bind((ip,port)):          绑定IP地址和端口
listen(N):              开始TCP监听,N表示操作系统挂起的最大连接数量,取值范围1-5之间,一般设置为5
accept():               被动接收TCP客户端连接,阻塞式
connect((ip,port)):       知道婆娘初始化TCP服务器连接
recv(size):             接收TCP数据,返回值为字符串类型,size表示要接受的最大数据量
send(str):              发送TCP数据,返回值是要发送的字节数量
sendall(str):           完整发送TCP数据,将str中的数据发送到连接的套接字,返回之前尝试发水平所有数据,如果成功为None,失败抛出异常
recvfrom():             接收UDP数据,返回值为一个元组(data,address),data表示接收的数据,address表示发送数据的套接字地址
sendto(data,(ip,port)): 发送UDP数据,返回值是发送的字节数
close:                  关闭


TCP编程-TCP服务器端流程如下:
1.使用socket类创建一个套接字对象
2.使用bind((ip,port))方法绑定IP地址和端口号
3.使用listen()方法开始TCP监听
4.使用accept()方法等待客户端的连接
5.使用recv()/send()方法接收/发送数据
6.使用close()关闭套接字

TCP客户端的流程如下:
1.使用socket类创建一个套接字对象
2.使用connect((ip,prot))设置连接的主机IP和主机设置的端口号
3.使用recv()/send()方法接收/发送数据
4.使用close()关闭套接字
'''

import socket

# 1.使用socket类创建一个套接字对象
client_socket = socket.socket()
# 2.使用connect((ip,prot))设置连接的主机IP和主机设置的端口号
ip = '127.0.0.1'  # 本机ip
port = 8888  # 端口
client_socket.connect((ip, port))
print('与服务器连接建立成功')

# 3.使用recv()/send()方法接收/发送数据
client_socket.send('Welcome to python world'.encode('utf-8'))
# 4.使用close()关闭套接字
client_socket.close()
print('客户端发送完毕')

多次通信客户端和服务端的简单实现

复制代码
- 客户端实现
python 复制代码
'''
网络变成与通信协议
通信协议:即规则,为了使全球不同类型的计算机都可以连接在一起,指定的一套全球通用的通信协议---Internet协议,任何私有网络,只要支持这个协议,就可以接入互联网
通信协议层级图:chap12/img.png

TCP/IP协议
IP协议是整个TCP/IP协议族的核心
IP地址就是互联网上计算机的唯一标识
目前的IP地址有两种表示方式,即IPV4和IPV6
在命令行下使用ipconfig命令可以查看本机的IP地址

TCP(Transmission Control Protocol)协议即传输控制协议,是建立在IP协议基础上的,TCP协议负责两台计算机之间练级可靠连接,保证数据包按顺序发送,它是一种可靠的,一对一的,面向有连接的通信协议

UDP协议又被称为用户数据报协议(User Datagram Protocol),它是面向无连接的协议,只要知道对方的IP地址和端口,就可以直接发送数据包,由于面向无连接的,所以无法保证数据一定会到达接收方

端口号:
区分计算机中的运行的应用程序的整数
端口号的取值范围是0到65535,一共65536个,其中80这个端口号分配给了HTTP服务,21这个端口号分配给了FTP服务


TCP协议与UDP协议的区别
                            TCP协议                               UDP协议
连接方面                    面向连接的                              面向无连接
安全方面                传输消息可靠,不丢失,按顺序到达                无法抱枕不丢包
传输效率方面               传输效率相对较低                          传输效率高
连接对象梳理方面            只能是点对点,一对一                       支持一对一,一对多,多对多的交互通信


Socket套接字
Socket对象的常用方法
方法名称:                 功能描述
bind((ip,port)):          绑定IP地址和端口
listen(N):              开始TCP监听,N表示操作系统挂起的最大连接数量,取值范围1-5之间,一般设置为5
accept():               被动接收TCP客户端连接,阻塞式
connect((ip,port)):       知道婆娘初始化TCP服务器连接
recv(size):             接收TCP数据,返回值为字符串类型,size表示要接受的最大数据量
send(str):              发送TCP数据,返回值是要发送的字节数量
sendall(str):           完整发送TCP数据,将str中的数据发送到连接的套接字,返回之前尝试发水平所有数据,如果成功为None,失败抛出异常
recvfrom():             接收UDP数据,返回值为一个元组(data,address),data表示接收的数据,address表示发送数据的套接字地址
sendto(data,(ip,port)): 发送UDP数据,返回值是发送的字节数
close:                  关闭


TCP编程-TCP服务器端流程如下:
1.使用socket类创建一个套接字对象
2.使用bind((ip,port))方法绑定IP地址和端口号
3.使用listen()方法开始TCP监听
4.使用accept()方法等待客户端的连接
5.使用recv()/send()方法接收/发送数据
6.使用close()关闭套接字

TCP客户端的流程如下:
1.使用socket类创建一个套接字对象
2.使用connect((ip,prot))设置连接的主机IP和主机设置的端口号
3.使用recv()/send()方法接收/发送数据
4.使用close()关闭套接字
'''

import socket

# 1.使用socket类创建一个套接字对象
client_socket = socket.socket()
# 2.使用connect((ip,prot))设置连接的主机IP和主机设置的端口号
ip = '127.0.0.1'  # 本机ip
port = 8888  # 端口
client_socket.connect((ip, port))
print('--------------与服务器连接建立成功--------------')

# 3.使用recv()/send()方法接收/发送数据
info=''
while info !='bye':
    #准备发送的数据
    send_data=input('客户端输入要发送的数据: ')
    client_socket.send(send_data.encode('utf-8'))
    if send_data =='bye':
        break
    #接收服务端发送的数据
    info = client_socket.recv(1024).decode('utf-8')
    print(f'接收到服务器的响应数据: {info}')
# 4.使用close()关闭套接字
client_socket.close()
print('客户端发送完毕')
复制代码
- 服务端实现
python 复制代码
'''
网络变成与通信协议
通信协议:即规则,为了使全球不同类型的计算机都可以连接在一起,指定的一套全球通用的通信协议---Internet协议,任何私有网络,只要支持这个协议,就可以接入互联网
通信协议层级图:chap12/img.png

TCP/IP协议
IP协议是整个TCP/IP协议族的核心
IP地址就是互联网上计算机的唯一标识
目前的IP地址有两种表示方式,即IPV4和IPV6
在命令行下使用ipconfig命令可以查看本机的IP地址

TCP(Transmission Control Protocol)协议即传输控制协议,是建立在IP协议基础上的,TCP协议负责两台计算机之间练级可靠连接,保证数据包按顺序发送,它是一种可靠的,一对一的,面向有连接的通信协议

UDP协议又被称为用户数据报协议(User Datagram Protocol),它是面向无连接的协议,只要知道对方的IP地址和端口,就可以直接发送数据包,由于面向无连接的,所以无法保证数据一定会到达接收方

端口号:
区分计算机中的运行的应用程序的整数
端口号的取值范围是0到65535,一共65536个,其中80这个端口号分配给了HTTP服务,21这个端口号分配给了FTP服务


TCP协议与UDP协议的区别
                            TCP协议                               UDP协议
连接方面                    面向连接的                              面向无连接
安全方面                传输消息可靠,不丢失,按顺序到达                无法抱枕不丢包
传输效率方面               传输效率相对较低                          传输效率高
连接对象梳理方面            只能是点对点,一对一                       支持一对一,一对多,多对多的交互通信


Socket套接字
Socket对象的常用方法
方法名称:                 功能描述
bind((ip,port)):          绑定IP地址和端口
listen(N):              开始TCP监听,N表示操作系统挂起的最大连接数量,取值范围1-5之间,一般设置为5
accept():               被动接收TCP客户端连接,阻塞式
connect((ip,port)):       知道婆娘初始化TCP服务器连接
recv(size):             接收TCP数据,返回值为字符串类型,size表示要接受的最大数据量
send(str):              发送TCP数据,返回值是要发送的字节数量
sendall(str):           完整发送TCP数据,将str中的数据发送到连接的套接字,返回之前尝试发水平所有数据,如果成功为None,失败抛出异常
recvfrom():             接收UDP数据,返回值为一个元组(data,address),data表示接收的数据,address表示发送数据的套接字地址
sendto(data,(ip,port)): 发送UDP数据,返回值是发送的字节数
close:                  关闭


TCP编程-TCP服务器端流程如下:
1.使用socket类创建一个套接字对象
2.使用bind((ip,port))方法绑定IP地址和端口号
3.使用listen()方法开始TCP监听
4.使用accept()方法等待客户端的连接
5.使用recv()/send()方法接收/发送数据
6.使用close()关闭套接字
'''
import socket

# AF_INET 用于Internet之间的进程通信
# SOCK_STREAM 表示的是用TCP协议编程

# 1.使用socket类创建一个套接字对象
service_obj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.使用bind((ip,port))方法绑定IP地址和端口号
ip = '127.0.0.1'  # 本机ip
port = 8888  # 端口
service_obj.bind((ip, port))
# 3.使用listen()方法开始TCP监听
service_obj.listen(5)
print('服务器已经启动')
# 4.使用accept()方法等待客户端的连接
client_socket, client_address = service_obj.accept()
# 5.使用recv()/send()方法接收/发送数据
info = client_socket.recv(1024).decode('utf-8')
while info !='bye':
    if info!='':
        print(f'接收到的数据是: {info}')

    #准备发送的数据
    send_data = input('请输入服务端要发送的数据:')
    #  发送数据
    client_socket.send(send_data.encode('utf-8'))
    if send_data == 'bye':
        break
    info = client_socket.recv(1024).decode('utf-8')

# 6.使用close()关闭套接字
client_socket.close()
service_obj.close()
'''
TCP客户端的流程如下:
1.使用socket类创建一个套接字对象
2.使用connect((ip,prot))设置连接的主机IP和主机设置的端口号
3.使用recv()/send()方法接收/发送数据
4.使用close()关闭套接字
'''

UDP实现客户端和服务端

  • UDP发送方
python 复制代码
from socket import socket, AF_INET, SOCK_DGRAM

# 1.创建Socket对象
send_socket = socket(AF_INET, SOCK_DGRAM)
# 2.准备发送数据
data = input('请输入要发送的数据:')
# 3.指定接收方的ip和port
ip_port = ('127.0.0.1', 8888)
# 4.发送数据
send_socket.sendto(data.encode('utf-8'), ip_port)
# 接收来自接收方回复的数据
recv_data, add = send_socket.recvfrom(1024)
print('接收到的数据为:', recv_data.decode('utf-8'))
# 5.使用close()关闭套接字
send_socket.close()
  • UDP接收方
python 复制代码
import socket

# 1.使用socket类创建一个套接字对象
recv_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 2.绑定ip和端口
ip = '127.0.0.1'  # 本机ip
port = 8888  # 端口
recv_socket.bind((ip, port))
# 3.接收来自发送方的数据
recv_data, addr = recv_socket.recvfrom(1024)
print('接收到的数据为:', recv_data.decode('utf-8'))
# 4.准备回复对方的数据
data = input('请输入要回复的数据:')
recv_socket.sendto(data.encode('utf-8'), addr)
# 5.关闭
recv_socket.close()

UDP实现客服

  • 客服端实现
python 复制代码
import socket

# 1.使用socket类创建一个套接字对象
recv_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2.绑定ip和端口
ip = '127.0.0.1'  # 本机ip
port = 8888  # 端口
recv_socket.bind((ip, port))

while True:
    # 3.接收来自发送方的数据
    recv_data, addr = recv_socket.recvfrom(1024)
    recv_decode_data = recv_data.decode('utf-8')
    print('客户说:', recv_decode_data)
    if recv_decode_data == 'bye':
        break
    # 4.准备回复对方的数据
    data = input('客服回复:')
    recv_socket.sendto(data.encode('utf-8'), addr)
# 5.关闭
recv_socket.close()
  • 客户端实现
python 复制代码
from socket import socket, AF_INET, SOCK_DGRAM

# 1.创建Socket对象
send_socket = socket(AF_INET, SOCK_DGRAM)
while True:
    # 2.准备发送数据
    data = input('客户说:')
    # 3.指定接收方的ip和port
    ip_port = ('127.0.0.1', 8888)
    # 4.发送数据
    send_socket.sendto(data.encode('utf-8'), ip_port)
    if data == 'bye':
        break
    # 接收来自接收方回复的数据
    recv_data, add = send_socket.recvfrom(1024)
    print('客服回复:', recv_data.decode('utf-8'))
# 5.使用close()关闭套接字
send_socket.close()
相关推荐
Loo国昌4 分钟前
【LangChain1.0】第九阶段:文档处理工程 (LlamaIndex)
人工智能·后端·python·算法·langchain
抠头专注python环境配置37 分钟前
基于Python与深度学习的智能垃圾分类系统设计与实现
pytorch·python·深度学习·分类·垃圾分类·vgg·densenet
愈努力俞幸运1 小时前
flask 入门 token, headers,cookie
后端·python·flask
梦想是成为算法高手1 小时前
带你从入门到精通——知识图谱(一. 知识图谱入门)
人工智能·pytorch·python·深度学习·神经网络·知识图谱
用什么都重名1 小时前
Conda 虚拟环境安装配置路径详解
windows·python·conda
阿也在北京1 小时前
基于Neo4j和TuGraph的知识图谱与问答系统搭建——胡歌的导演演员人际圈
python·阿里云·知识图谱·neo4j
计算机徐师兄1 小时前
Python基于知识图谱的胆囊炎医疗问答系统(附源码,文档说明)
python·知识图谱·胆囊炎医疗问答系统·python胆囊炎医疗问答系统·知识图谱的胆囊炎医疗问答系统·python知识图谱·医疗问答系统
北冥码鲲1 小时前
【保姆级教程】从零入手:Python + Neo4j 构建你的第一个知识图谱
python·知识图谱·neo4j
B站计算机毕业设计超人1 小时前
计算机毕业设计Python+大模型音乐推荐系统 音乐数据分析 音乐可视化 音乐爬虫 知识图谱 大数据毕业设计
人工智能·hadoop·爬虫·python·数据分析·知识图谱·课程设计