c 网站开发需要学什么软件,怎样做网站的用户分析,游戏开发代码,黔东南小程序开发公司目录
一、单线程服务器
二、多线程服务器
三、多线程服务器#xff08;发送和接收分离#xff09; 一、单线程服务器
说明#xff1a;只能连接一个客户端
import socket,binascii# 创建一个 TCP 套接字
server_socket socket.socket(socket.AF_INET, socket.SOCK_STRE…目录
一、单线程服务器
二、多线程服务器
三、多线程服务器发送和接收分离 一、单线程服务器
说明只能连接一个客户端
import socket,binascii# 创建一个 TCP 套接字
server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定套接字到指定的主机和端口
server_address (localhost, 6666)
server_socket.bind(server_address)# 开始监听连接
server_socket.listen(5) # 最多同时监听 5 个连接请求print(等待客户端连接...)while True:# 等待客户端连接client_socket, client_address server_socket.accept()print(f接受来自 {client_address} 的连接)# 接收客户端发送的数据while True:data client_socket.recv(1024) # 最多接收 1024 字节的数据data_hex binascii.hexlify(data).decode(utf-8) # 将二进制数据转换为十六进制字符串print(data_hex)# 向客户端回复响应数据sendData 1A2B3Cclient_socket.send(bytes.fromhex(sendData))if not data:break # 如果没有数据退出循环# 关闭与客户端的连接client_socket.close()break# 关闭服务器套接字
server_socket.close()客户端测试结果 服务端测试结果 二、多线程服务器 说明可以支持连接多个客户端
import socket,binascii,threadingdef thread_HandleClient(client_socket): # 用于处理与客户端连接后的逻辑while True:# 接收客户端发送的数据data client_socket.recv(1024)data_hex binascii.hexlify(data).decode(utf-8) # 将二进制数据转换为十六进制字符串print(f接收到来自 {client_socket.getpeername()} 的数据{data_hex})if not data:break # 如果没有数据退出循环# 向客户端发送响应数据sendData 1A2B3Cclient_socket.send(bytes.fromhex(sendData))# client_socket.sendall(bytes.fromhex(sendData))# 关闭与客户端的连接client_socket.close()# 创建一个 TCP 套接字
server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定套接字到指定的主机和端口
server_address (localhost, 6666)
server_socket.bind(server_address)# 开始监听连接
server_socket.listen(5) # 最多同时监听 5 个连接请求print(等待客户端连接...)while True:# 等待客户端连接client_socket, client_address server_socket.accept()print(f接受来自 {client_address} 的连接)# 创建一个新线程来处理客户端连接client_thread threading.Thread(targetthread_HandleClient, args(client_socket,))client_thread.start()客户端测试结果 服务端测试结果 三、多线程服务器发送和接收分离
说明 可以支持连接多个客户端并且能够做到和多个客户端发送、接收信息同时进行
import socket,threading,binascii,timedef receive_data(client_socket):while True:try:# 接收客户端发送的数据data client_socket.recv(1024)data_hex binascii.hexlify(data).decode(utf-8) # 将二进制数据转换为十六进制字符串print(f接收到来自 {client_socket.getpeername()} 的数据{data_hex})if not data:break # 如果没有数据退出循环except Exception as e:print(f接收数据时出现错误{e})break# 关闭与客户端的连接client_socket.close()def send_data(client_socket):while True:try:sendData 1A2A3A # 要发送的数据client_socket.sendall(bytes.fromhex(sendData)) # 向客户端发送数据time.sleep(1) # 1s发1条except Exception as e:print(f发送数据时出现错误{e})breakif __name__ __main__:# 创建一个 TCP 套接字server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定套接字到指定的主机和端口server_address (localhost, 6666)server_socket.bind(server_address)# 开始监听连接server_socket.listen(5) # 最多同时监听 5 个连接请求print(等待客户端连接...)while True:# 等待客户端连接client_socket, client_address server_socket.accept()print(f接受来自 {client_address} 的连接)# 创建两个新线程分别处理接收和发送操作receive_thread threading.Thread(targetreceive_data, args(client_socket,))send_thread threading.Thread(targetsend_data, args(client_socket,))# 启动线程receive_thread.start()send_thread.start()客户端测试结果 服务端测试结果