文章目录
- 前言
- 一、pandas是什么?
- 二、使用步骤
- 1.引入库
- 2.读入数据
- 总结
一.客户端与服务端通信原理
1. 服务器端
服务器端的主要任务是监听来自客户端的连接请求,并与之建立连接,然后接收和发送数据。
-
创建套接字:首先,服务器需要创建一个套接字(socket),这个套接字将用于监听来自客户端的连接请求。在创建套接字时,需要指定地址族(如IPv4的
socket.AF_INET
)和套接字类型(对于TCP,使用socket.SOCK_STREAM
)。 -
绑定地址和端口:服务器需要将套接字绑定到一个具体的IP地址和端口号上,以便客户端能够找到并连接到它。
-
监听连接:服务器使用
listen()
方法开始监听连接请求。此时,服务器处于等待状态,直到接收到客户端的连接请求。 -
接受连接:当服务器接收到客户端的连接请求时,它使用
accept()
方法来接受这个连接。accept()
方法会返回一个包含新连接的套接字和客户端地址的元组。服务器将使用这个新连接的套接字来与客户端进行通信。 -
数据收发:一旦连接建立,服务器和客户端就可以通过各自的套接字发送和接收数据了。数据可以是文本、二进制文件等任何类型的数据。
-
关闭连接:通信完成后,服务器和客户端都应该关闭它们各自的套接字,以释放系统资源。
2. 客户端
客户端的主要任务是连接到服务器,并与之进行数据交换。
-
创建套接字:与服务器类似,客户端也需要创建一个套接字,并指定地址族和套接字类型。
-
连接服务器:客户端使用
connect()
方法连接到服务器。在调用connect()
方法时,需要传入服务器的IP地址和端口号。 -
数据收发:一旦连接建立,客户端就可以通过套接字发送数据到服务器,并接收服务器发回的数据了。
-
关闭连接:通信完成后,客户端应该关闭套接字,以释放系统资源。
3. 原理总结
-
TCP三次握手:在TCP通信中,建立连接的过程涉及到三次握手。这确保了双方都能够确认对方的存在和准备接收数据。
-
数据传输:TCP协议确保了数据的可靠传输。它通过序列号、确认应答、超时重传等机制来确保数据的顺序、完整性和无重复传输。
-
连接管理:TCP连接是面向连接的,这意味着在数据交换之前必须先建立连接,并在数据交换完成后关闭连接。
-
错误处理:在通信过程中,可能会遇到各种错误(如网络中断、连接超时等)。Python的
socket
模块提供了相应的异常处理机制,允许开发者在发生错误时采取适当的措施。
二.Socket模块
套接字(Socket)是一个非常重要的概念,它提供了一个用于网络通信的接口。套接字允许不同计算机上的程序之间进行数据传输。这种通信方式既可以是本机上的程序间的通信,也可以是跨网络的计算机之间的通信
在Python中进行TCP和UDP通信,可以使用内置的socket模块。socket模块提供了用于创建客户端和服务器端套接字的函数和方法。以下是一些常用的TCP通信函数:
服务端
- 创建一个TCP套接字:
socket.socket(socket.AF_INET, socket.SOCK_STREAM):
- 将套接字绑定到指定的地址和端口。
socket.bind(IP,端口)
- 开始监听传入的连接请求。
socket.listen(同时处理的请求数)
- 接受一个连接请求,返回一个新的套接字对象,以及客户端的地址
socket.accept()
socket.accept()
是服务器在调用listen()
方法之后等待客户端连接时使用的。这个调用会阻塞程序运行,直到有一个客户端连接到服务器,再执行下面程序- 当客户端成功连接到服务器时,
accept()
方法会返回一个元组,其中包含两个元素:- 第一个元素包含服务端接收客户端连接的IP+端口
- 第二个元素包含客户端连接的IP+端口
客户端
- 连接到服务端的地址和端口
socket.connect(IP,端口)
- 发送数据到连接的另一端
socket.send(data)
- 接收来自连接的数据
socket.recv(字节大小)
- 关闭套接字连接
socket.close()
三.演示案例
服务端
import socket
# 创建TCP服务器端
Tcp_Server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Tcp_Server.bind(("0.0.0.0",8888)) #将IP和端口与套接字绑定
Tcp_Server.listen(10) #此处设置该进程socket最多处理的连接数是10
#等待客户端连接
while True:
Tcp_Client,info = Tcp_Server.accept() #阻塞程序运行直到收到客户端连接
Tcp_Client.send("成功连接服务器!".encode()) #将发送的数据进行UTF-8编码
客户端
import socket
Tcp_Client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#连接服务器
Server_IP = ("127.0.0.1",8888)
Tcp_Client.connect(Server_IP) #连接服务器127.0.0.1中端口号为8888的进程socket
#接收服务端信息
data_Server = Tcp_Client.recv(1024) #接收服务端的字节数为1024
print(data_Server.decode()) #将接收的二进制数据转换为字符串
总结