2.1 סוקטים פתרון
שרת echo¶
- שרת
import socket # שרת echo def start_echo_server(host, port): server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind((host, port)) server_socket.listen(5) print(f"Listening on {host}:{port}...") while True: client_socket, client_address = server_socket.accept() print(f"Connection from {client_address}") data = client_socket.recv(1024) while data: client_socket.send(data) data = client_socket.recv(1024) client_socket.close() if __name__ == "__main__": start_echo_server("127.0.0.1", 65432) - לקוח
def start_echo_client(host, port): client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect((host, port)) while True: message = input("Enter message: ") client_socket.send(message.encode()) data = client_socket.recv(1024) print(f"Received: {data.decode()}") if __name__ == "__main__": start_echo_client("127.0.0.1", 65432)
שרת מייל¶
- שרת
import socket clients = {} # שרת מיילים def start_mail_server(host, port): server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind((host, port)) server_socket.listen(5) print(f"Mail server started on {host}:{port}...") while True: client_socket, client_address = server_socket.accept() print(f"Connection from {client_address}") client_socket.send(b"Enter your name: ") name = client_socket.recv(1024).decode().strip() clients[client_socket] = {'name': name, 'inbox': []} client_socket.send(b"Welcome, " + name.encode() + b"\n") while True: client_socket.send(b"1. Send mail\n2. Read inbox\n3. Exit\n") option = client_socket.recv(1024).decode().strip() if option == "1": client_socket.send(b"Enter recipient name: ") recipient_name = client_socket.recv(1024).decode().strip() recipient_socket = next((s for s, v in clients.items() if v['name'] == recipient_name), None) if recipient_socket: client_socket.send(b"Enter your message: ") message = client_socket.recv(1024).decode().strip() recipient_socket.send(f"New mail from {clients[client_socket]['name']}: {message}".encode()) else: client_socket.send(b"Recipient not found.\n") elif option == "2": inbox = "\n".join(clients[client_socket]['inbox']) or "No mail." client_socket.send(f"Your inbox:\n{inbox}\n".encode()) elif option == "3": client_socket.close() break if __name__ == "__main__": start_mail_server("127.0.0.1", 65433) - לקוח
def start_mail_client(host, port): client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect((host, port)) while True: message = client_socket.recv(1024).decode() print(message) if message.startswith("Enter your name"): name = input() client_socket.send(name.encode()) elif message.startswith("1. Send mail"): option = input() client_socket.send(option.encode()) if option == "1": message = client_socket.recv(1024).decode() print(message) recipient = input() client_socket.send(recipient.encode()) message = client_socket.recv(1024).decode() print(message) message_body = input() client_socket.send(message_body.encode()) elif option == "2": message = client_socket.recv(1024).decode() print(message) elif option == "3": break if __name__ == "__main__": start_mail_client("127.0.0.1", 65433)
ווצ'אפ¶
- שרת -שימו לב שבפתרון משומש ספריית threading כדי לגרום לhandle client לרוץ ברקע, אם אתם לא מכירים את הנושא מוזמנים לקרוא באינטרנט או לעשות את הקורס פייתון שלנו: "קורס תכנות בסיסי".
import socket import threading clients = {} def handle_client(client_socket, client_address): client_socket.send(b"Enter your name: ") name = client_socket.recv(1024).decode().strip() clients[client_socket] = name client_socket.send(b"Welcome to the chat!\n") while True: message = client_socket.recv(1024) if message: for socket, client_name in clients.items(): if socket != client_socket: socket.send(f"{name}: {message.decode()}\n".encode()) else: break del clients[client_socket] client_socket.close() def start_chat_server(host, port): server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind((host, port)) server_socket.listen(5) print(f"Chat server started on {host}:{port}...") while True: client_socket, client_address = server_socket.accept() print(f"New connection from {client_address}") thread = threading.Thread(target=handle_client, args=(client_socket, client_address)) thread.start() if __name__ == "__main__": start_chat_server("127.0.0.1", 65434) - לקוח
import socket import threading def receive_messages(client_socket): while True: message = client_socket.recv(1024) if message: print(message.decode(), end="") else: break def start_chat_client(host, port): client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect((host, port)) name = input("Enter your name: ") client_socket.send(name.encode()) thread = threading.Thread(target=receive_messages, args=(client_socket,)) thread.start() while True: message = input() if message: client_socket.send(message.encode()) else: break client_socket.close() if __name__ == "__main__": start_chat_client("127.0.0.1", 65434)