Python Чат с использованием сокета - PullRequest
0 голосов
/ 05 апреля 2020

Сначала извините за мой английский sh: / Я много раз ищу эту проблему, но не могу найти.

server.py:

import socket
import os
import time
import sys

try:
    host=sys.argv[1]
    port=sys.argv[2]
    os.system("clear")
except IndexError:
    print("usage : python3 fserver.py [host] [port]")
    exit()

c1="\033[1;31;40m"
c2="\033[1;32;40m"
c3="\033[1;36;40m"
r="\033[m"

try:
    server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    server.bind((host,int(port)))
    server.listen(1)
    print(f"{c2}[#]{r} server started on ({c3}{host}~{port}{r}) at {c3}{time.strftime('%H:%M:%S')}{r}")
    client,address=server.accept()
    print(f"{c2}[#]{r} {c3}{address[0]}{r} connected to server at {c3}{time.strftime('%H:%M:%S')}{r}")
    client_name=client.recv(1024).decode()
    print(f"{c2}[*]{r} client name : {c3}{client_name}{r}")
except KeyboardInterrupt:
    server.close()
    print("[*] server closed.")
    sys.exit()
except socket.error as err:
    print(f"Error : {c1}{err}{r}")
    sys.exit()
except OSError as err:
    print(f"Error : {c1}{err}{r}")
    sys.exit()

def message():
    print(f"{c2}[#]{r} starting chat.\n")
    while True:
        msg=str(input(f"{c2}you{r} > "))
        client.send(msg.encode())
        msg_c=client.recv(1024).decode()
        print(f"{c3}{client_name}{r} > {msg_c}")

def chat():
    try:
        message()
    except KeyboardInterrupt:
        print("\nclosing...")
        client.close()
        sys.exit()
    except socket.error as err:
        print(f"\nError : {c1}{err}{r}")
        client.close()
        sys.exit()

def run_server():
    try:
        chat()
    except Exception as err:
        print(f"Error : {c1}{err}{r}")
        sys.exit()

run_server()

client.py:

import socket
import os
import sys
import time

try:
    host=sys.argv[1]
    port=sys.argv[2]
    nick=sys.argv[3]
    os.system("clear")
except IndexError:
    print("usage : python3 fclient.py [host] [port] [nick]")
    exit()

c1="\033[1;31;40m"
c2="\033[1;32;40m"
c3="\033[1;36;40m"
r="\033[m"

try:
    client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    client.connect((host,int(port)))
    client.send(nick.encode())
    print(f"{c2}[#]{r} connected to server ({c3}{host}~{port}{r})")
except KeyboardInterrupt:
    print(f"{c2}[*]{r} stopped.")
    sys.exit()
except socket.error as err:
    print(f"Error : {c1}{err}{r}")
    sys.exit()
except OSError as err:
    print(f"Error : {c1}{err}{r}")
    sys.exit()

def message():
    print(f"{c2}[#]{r} starting chat.\n")
    while True:
        msg_c=client.recv(1024).decode()
        print(f"{c3}server{r} > {msg_c}") 
        msg=str(input(f"{c2}you{r} > "))
        client.send(msg.encode())

def chat():
    try:
        message()
    except KeyboardInterrupt:
        print("\nclosing...")
        client.close()
        sys.exit()
    except socket.error as err:
        print(f"\nError : {c1}{err}{r}")
        client.close()
        sys.exit()

def run_client():
    chat()

run_client()

Когда вы подключаетесь к серверу и запускаете чат, вы видите, что клиент должен ждать сообщения от сервера, и это происходит, когда сервер отправляет сообщение на сервер. Теперь, как я могу это сделать. Используя проклятия или по-другому?

...