这里给您详细讲解一下"Python网络编程学习笔记(三):Socket网络服务器"的完整攻略。
概述
在本文中,我们将学习如何使用Python编写一个基础的Socket网络服务器。Socket是TCP/IP协议的一个封装,我们可以使用Socket来进行网络通信。
功能需求
- 监听客户端的网络连接。当有客户端连接时,处理客户端的请求并向客户端发送响应数据。
- 实现多客户端的网络连接并处理。
步骤说明:
步骤一:导入相关模块
首先我们需要导入相关模块:socket、datetime。
import socket
from datetime import datetime
步骤二:设置服务器IP和端口号
在本示例中,我们将服务器IP设置为 "127.0.0.1",端口号设置为8080。
SERVER_IP = '127.0.0.1'
SERVER_PORT = 8080
步骤三:创建Socket对象
接下来,我们需要使用socket库中的socket函数来创建一个socket对象。我们将使用IPv4和TCP协议,即AF_INET、SOCK_STREAM。这应该是大多数Web服务器使用的协议类型。
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
步骤四:绑定IP地址和端口号
我们需要将被动打开的SOCKET绑定到服务器的IP地址和端口号上,以便客户端能够到达服务器。我们可以使用bind()函数来进行绑定操作。
server.bind((SERVER_IP, SERVER_PORT))
步骤五:设置监听的最大连接数
我们需要使用listen()函数,将这个socket变为可以被动链接的socket。并制定最大的连接数。
server.listen(1)
步骤六:接收客户端连接并处理请求
使用accept()函数接收来自客户端的请求。当有客户端连接时,服务器会收到一个新的socket对象和客户端的地址。使用recv()函数来接收客户端发送的请求数据,并使用sendall()函数向客户端发送响应数据。
while True:
# 接受客户端请求
conn, addr = server.accept()
print(f"[{datetime.now()}] New connection from {addr}")
# 接收客户端的请求数据
request = conn.recv(1024).decode()
print(f"[{datetime.now()}] Request from {addr}: {request}")
# 返回响应数据
response = "Hello, world!"
conn.sendall(response.encode())
步骤七:关闭Socket连接
当需要关闭服务器时,使用close()函数关闭Socket连接。
server.close()
示例1:基础网络服务器
下面是一个基础的网络服务器示例代码,可以监听客户端的网络连接,当有客户端连接时,处理客户端的请求并向客户端发送响应数据。
import socket
from datetime import datetime
# 设置服务器IP和端口号
SERVER_IP = '127.0.0.1'
SERVER_PORT = 8080
# 创建Socket对象
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口号
server.bind((SERVER_IP, SERVER_PORT))
# 设置监听的最大连接数
server.listen(1)
print(f"Server listening on {SERVER_IP}:{SERVER_PORT}...")
while True:
# 接受客户端请求
conn, addr = server.accept()
print(f"[{datetime.now()}] New connection from {addr}")
# 接收客户端的请求数据
request = conn.recv(1024).decode()
print(f"[{datetime.now()}] Request from {addr}: {request}")
# 返回响应数据
response = "Hello, world!"
conn.sendall(response.encode())
# 关闭连接
conn.close()
示例2:多客户端网络服务器
下面是一个可以处理多客户端连接的网络服务器示例代码。当有新的客户端连接时,服务器将创建一个新的线程来处理客户端请求。
import socket
from datetime import datetime
from threading import Thread
# 设置服务器IP和端口号
SERVER_IP = '127.0.0.1'
SERVER_PORT = 8080
# 创建Socket对象
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口号
server.bind((SERVER_IP, SERVER_PORT))
# 设置监听的最大连接数
server.listen(5)
print(f"Server listening on {SERVER_IP}:{SERVER_PORT}...")
# 客户端处理线程类
class ClientThread(Thread):
def __init__(self, conn, addr):
Thread.__init__(self)
self.conn = conn
self.addr = addr
def run(self):
print(f"[{datetime.now()}] New connection from {self.addr}")
# 接收客户端的请求数据
request = self.conn.recv(1024).decode()
print(f"[{datetime.now()}] Request from {self.addr}: {request}")
# 返回响应数据
response = "Hello, world!"
self.conn.sendall(response.encode())
# 关闭连接
self.conn.close()
while True:
# 接受客户端请求
conn, addr = server.accept()
# 创建线程处理客户端请求
client_thread = ClientThread(conn, addr)
client_thread.start()
以上就是我们编写一个基础的Socket网络服务器的完整攻略及示例代码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python网络编程学习笔记(三):socket网络服务器 - Python技术站