【python】python网络编程
python socket编程
Python中的socket编程是一种网络编程的方法,用于在不同的计算机之间进行通信。它基于传输控制协议(TCP)或用户数据报协议(UDP)来建立网络连接,并通过套接字(socket)来发送和接收数据。
套接字是一种抽象的概念,它代表了一个网络连接的一端。套接字可以是客户端或服务器端,用于建立连接和进行数据传输。
在Python中,socket编程是通过socket模块来实现的。该模块提供了各种方法和类,用于创建、连接、发送和接收套接字。
常用的socket编程方法包括:
- socket():创建一个套接字对象。
- bind():将套接字绑定到指定的地址和端口。
- listen():开始监听连接请求。
- accept():接受客户端的连接请求。
- connect():与服务器建立连接。
- send():发送数据。
- recv():接收数据。
- close():关闭套接字连接。
使用socket编程,可以实现各种网络应用,比如创建一个简单的聊天程序、发送和接收文件,或者搭建一个简单的Web服务器等。
Transmission Control Protocol,传输控制协议
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的传输协议。它位于传输层,为应用层提供可靠的数据传输服务。TCP协议通过建立连接、数据传输和断开连接的过程来实现可靠的数据传输。
TCP协议的特点包括以下几个方面:
- 可靠性:TCP协议通过使用序号、确认、重传等机制来确保数据的可靠传输。发送方在发送数据时,会给每个数据包分配一个序号,并等待接收方的确认,如果没有收到确认,则会进行重传。
- 有序性:TCP协议可以保证数据按照发送的顺序来传输,接收方会重新排序接收到的数据,以保证应用层收到的数据按照发送的顺序组织。
- 流量控制:TCP协议通过使用滑动窗口机制来控制发送方发送数据的速度,以防止接收方的缓冲区溢出。
- 拥塞控制:TCP协议通过使用拥塞窗口机制来控制网络中的拥塞情况,以保证网络的稳定性和公平性。
- 连接管理:TCP协议通过建立连接、维护连接和释放连接的过程来管理连接,可以确保数据的可靠传输和正确的流量控制。
总之,TCP协议提供了可靠的、面向连接的数据传输服务,适用于需要可靠性和有序性的应用程序。
服务端实现代码
from socket import *
# 定义服务器IP地址和端口号
IP = "127.0.0.1"
PORT = 5000
BUFLEN = 1024
# 创建一个TCP套接字
with socket(AF_INET, SOCK_STREAM) as listenSocket:
# 绑定IP地址和端口号
listenSocket.bind((IP, PORT))
# 监听连接
listenSocket.listen(5)
print(f"Server is listening on {IP}:{PORT},please wait...")
# 接受客户端连接
dataSocket, addr = listenSocket.accept()
print(f"Connected by {addr}")
# 循环接收客户端发送的数据
while True:
# 接收数据
received = dataSocket.recv(BUFLEN)
# 如果接收到的数据为空,则退出循环
if not received:
break
# 将接收到的数据解码为字符串
info = received.decode("utf-8")
# 打印接收到的数据
print(f"Received: {info}")
# 将接收到的数据发送回客户端
dataSocket.sendall(info.encode("utf-8"))
# 关闭套接字
dataSocket.close()
客户端代码
from socket import *
# 定义IP地址和端口号
IP = '127.0.0.1'
PORT = 5000
BUFLEN = 1024
# 创建一个TCP套接字
with socket(AF_INET, SOCK_STREAM) as clientSocket:
# 连接到服务器
clientSocket.connect((IP, PORT))
# 无限循环,直到用户输入exit
while True:
# 获取用户输入
data = input('>>> ')
# 如果用户输入exit或者空字符串,则退出循环
if data == 'exit' or data == '':
break
# 发送用户输入的数据到服务器
clientSocket.send(data.encode('utf-8'))
# 接收服务器返回的数据
data = clientSocket.recv(BUFLEN).decode('utf-8')
# 打印服务器返回的数据
print(data)
原文地址:https://blog.csdn.net/qq_18296979/article/details/140652488
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!