Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как сделать типа tcp сервер для онлайн чатов типа ip чата вводишь и готово на python на библиотеке socket?

Па Боб Профи (816), на голосовании 2 месяца назад
Голосование за лучший ответ
Chudo_Chudnoe Мастер (2186) 3 месяца назад
Привет!
Но надёжнее с паролем =)
Сначала нужно создать сервер, который будет слушать подключения от клиентов,


 import socket 
import threading

PASSWORD = "password" # Придумай свой пароль

def handle_client(client_socket):
try:
# Проверка пароля
client_socket.send("Введите пароль: ".encode('utf-8'))
client_password = client_socket.recv(1024).decode('utf-8')

if client_password != PASSWORD:
client_socket.send("Неправильный пароль! Подключение закрыто.".encode('utf-8'))
client_socket.close()
return

client_socket.send("Пароль принят. Добро пожаловать в чат!".encode('utf-8'))

while True:
message = client_socket.recv(1024).decode('utf-8')
if not message:
break
print(f"Получено сообщение: {message}")
broadcast(message, client_socket)
except:
pass
finally:
client_socket.close()

def broadcast(message, sender_socket):
for client in clients:
if client != sender_socket:
try:
client.send(message.encode('utf-8'))
except:
client.close()
clients.remove(client)

def start_server():
server.listen()
print(f"Сервер запущен на {SERVER_IP}:{SERVER_PORT}")
while True:
client_socket, client_address = server.accept()
print(f"Подключение от {client_address}")
clients.append(client_socket)
thread = threading.Thread(target=handle_client, args=(client_socket,))
thread.start()

SERVER_IP = '0.0.0.0'
SERVER_PORT = 12345

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((SERVER_IP, SERVER_PORT))

clients = []

if __name__ == "__main__":
start_server()



а затем обрабатывать сообщения, которые они отправляют.


 import socket 
import threading

def receive_messages():
while True:
try:
message = client.recv(1024).decode('utf-8')
if message:
print(message)
else:
break
except:
client.close()
break

def send_messages():
while True:
message = input()
client.send(message.encode('utf-8'))

SERVER_IP = '127.0.0.1'
SERVER_PORT = 12345

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((SERVER_IP, SERVER_PORT))

# Отправка пароля сразу после подключения
password = input("Введите пароль для подключения к чату: ")
client.send(password.encode('utf-8'))

receive_thread = threading.Thread(target=receive_messages)
receive_thread.start()

send_thread = threading.Thread(target=send_messages)
send_thread.start()


Запусти серверный код, потом подключайся к нему через клиентский код с разных устройств или на своём устройстве)
Похожие вопросы