You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
2.2 KiB

import socket #send/recive packets
import threading #threads
from time import sleep #wait
from random import randint #gen username + random int
##############SETTINGS##################
global host, port
#YOUR/SERVER IP
host = "127.0.0.1"
#YOUR/SERVER PORT
port = 7015
##############SERVER##################
def server_listen(conn_temp):
global conn
while True:
#Recive data and check for empty data
data = conn_temp.recv(1024).decode()
if data:
print(str(data))
#Send to others clients data from user
for i in range(len(conn)):
if conn[i] == conn_temp:
continue
conn[i].send(data.encode())
def server_accept(s):
global conn, adress
while True:
#Listen socket ip:port and accept connection
s.listen(2) ; conn_temp, address = s.accept()
conn.append(conn_temp)
#If accepted start listen
th = threading.Thread(target=server_listen, args=(conn_temp,), daemon=True)
th.start()
#Send to all message about new user ( exclude user )
data = f"New connection from {str(address[1])}"
print(data)
for i in range(len(conn)):
if conn[i] == conn_temp:
continue
conn[i].send(data.encode())
def server():
global host, port
global conn, adress
conn = []
#Bind server socket
s = socket.socket() ; s.bind((host, port))
#Start accept-connections func
th = threading.Thread(target=server_accept, args=(s,), daemon=True)
th.start()
#Chat with clients
while True:
data = "Server > " + input('')
for i in range(len(conn)):
conn[i].send(data.encode())
s.close()
##############CLIENT##################
def client_listen(s):
global host, port
while True:
#Recive and print data
sleep(0.01)
data = s.recv(1024).decode()
if data:
print(data)
def client():
global host, port
#Bind client socket
s = socket.socket() ; s.connect((host, port))
#Start listen server
th = threading.Thread(target=client_listen, args=(s,), daemon=True)
th.start()
#Gen id and start chatting
id = str(randint(100,1000))
while True:
message = f"User{id} > " + input('')
s.send(message.encode())
s.close()
##############START##################
try:
client()
except:
server()
#If no server (can't connect to server - error), then start server or start client.