2、SQL数据库设计
3、示例代码
P2P服务器与客户端程序编写
1.1 什么是P2P?
P2P(Peer-to-Peer)是一种网络架构,其中每个节点(即计算机或设备)既可以作为客户端也可以作为服务器,这种架构允许资源和任务在多个节点之间直接共享,而不需要通过中央服务器。
1.2 基本结构
服务器端:负责监听连接请求,处理客户端的请求。
客户端:发起连接请求,发送和接收数据。
1.3 通信协议
常用的通信协议包括TCP/IP、UDP等,对于P2P应用,通常使用TCP协议以确保数据传输的可靠性。
SQL数据库设计
2.1 数据库需求分析
假设我们要设计一个简单的文件共享系统,每个用户都可以上传和下载文件,我们需要以下几张表:
users
:存储用户信息
files
:存储文件信息
file_owners
:存储文件所有者信息
2.2 数据库表设计
2.2.1users
表
字段名 | 数据类型 | 描述 |
user_id | INT | 主键,自增 |
username | VARCHAR(50) | 用户名 |
password | VARCHAR(50) | 密码 |
VARCHAR(100) | 邮箱 |
2.2.2files
表
字段名 | 数据类型 | 描述 |
file_id | INT | 主键,自增 |
filename | VARCHAR(100) | 文件名 |
filepath | VARCHAR(255) | 文件路径 |
upload_date | DATETIME | 上传日期 |
2.2.3file_owners
表
字段名 | 数据类型 | 描述 |
owner_id | INT | 主键,自增 |
user_id | INT | 外键,引用users表的user_id |
file_id | INT | 外键,引用files表的file_id |
示例代码
3.1 Python实现P2P服务器与客户端
3.1.1 服务器端代码 (server.py)
import socket import threading def handle_client(client_socket): while True: try: data = client_socket.recv(1024) if not data: break print(f"Received: {data.decode('utf-8')}") client_socket.sendall(b'ACK') except: break client_socket.close() def main(): server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('0.0.0.0', 9999)) server.listen(5) print("Server listening on port 9999") while True: client_socket, addr = server.accept() print(f"Accepted connection from {addr}") client_handler = threading.Thread(target=handle_client, args=(client_socket,)) client_handler.start() if __name__ == "__main__": main()
3.1.2 客户端代码 (client.py)
import socket def main(): client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('127.0.0.1', 9999)) while True: message = input("Enter message to send: ") if message == 'exit': break client.sendall(message.encode('utf-8')) response = client.recv(1024) print(f"Received: {response.decode('utf-8')}") client.close() if __name__ == "__main__": main()
3.2 SQL操作示例(Python + SQLite)
3.2.1 创建数据库和表 (create_db.py)
import sqlite3 def create_tables(): conn = sqlite3.connect('p2p.db') cursor = conn.cursor() cursor.execute('''CREATE TABLE IF NOT EXISTS users ( user_id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL, password TEXT NOT NULL, email TEXT NOT NULL)''') cursor.execute('''CREATE TABLE IF NOT EXISTS files ( file_id INTEGER PRIMARY KEY AUTOINCREMENT, filename TEXT NOT NULL, filepath TEXT NOT NULL, upload_date DATETIME DEFAULT CURRENT_TIMESTAMP)''') cursor.execute('''CREATE TABLE IF NOT EXISTS file_owners ( owner_id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, file_id INTEGER, FOREIGN KEY(user_id) REFERENCES users(user_id), FOREIGN KEY(file_id) REFERENCES files(file_id))''') conn.commit() conn.close() if __name__ == "__main__": create_tables()
3.2.2 插入数据 (insert_data.py)
import sqlite3 def insert_user(username, password, email): conn = sqlite3.connect('p2p.db') cursor = conn.cursor() cursor.execute("INSERT INTO users (username, password, email) VALUES (?, ?, ?)", (username, password, email)) conn.commit() conn.close() def insert_file(filename, filepath): conn = sqlite3.connect('p2p.db') cursor = conn.cursor() cursor.execute("INSERT INTO files (filename, filepath) VALUES (?, ?)", (filename, filepath)) conn.commit() conn.close() def insert_file_owner(user_id, file_id): conn = sqlite3.connect('p2p.db') cursor = conn.cursor() cursor.execute("INSERT INTO file_owners (user_id, file_id) VALUES (?, ?)", (user_id, file_id)) conn.commit() conn.close() if __name__ == "__main__": insert_user('alice', 'password123', 'alice@example.com') insert_file('example.txt', '/path/to/example.txt') insert_file_owner(1, 1) # Assuming user_id and file_id are both 1 for this example
是关于P2P服务器与客户端程序编写以及SQL数据库设计的详细解释和示例代码,希望这些内容对你有所帮助!
以上内容就是解答有关p2p服务器与客户端程序编写_SQL编写的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。
本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/90111.html