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()
相关推荐
2301_796982148 分钟前
怎样使用pycharm中的服务?
python·pycharm
2301_796982148 分钟前
‌webdriver.Chrome()参数简介
前端·chrome·python
i道i43 分钟前
python 爬虫 入门 六、Selenium
爬虫·python·selenium
老猿讲编程1 小时前
Python 线程学习知识大全
python·线程
开心呆哥1 小时前
【Android Wi-Fi 操作命令指南】
android·python·pytest
alphaTao3 小时前
LeetCode 每日一题 2024/10/28-2024/11/3
python·算法·leetcode
Liquor14193 小时前
JavaScript知识点梳理及案例实践
开发语言·前端·javascript·python·css3·html5·js
张小生1804 小时前
《YOLO 目标检测》—— YOLO v4 详细介绍
人工智能·python·yolo
hummhumm6 小时前
Oracle 第22章:数据仓库与OLAP
java·javascript·后端·python·sql·mysql·database
归仁8 小时前
wvp 推拉转级联时频繁出现流无法观看的解决办法
linux·服务器·python·音视频