Added code for B8 (server + client).
This commit is contained in:
parent
4b0613299d
commit
a1a41ddc65
56
Codes/Code-B8 (Client).py
Executable file
56
Codes/Code-B8 (Client).py
Executable file
@ -0,0 +1,56 @@
|
||||
# TCP (lan) based chatting app
|
||||
|
||||
# --------------------------------------------------------------
|
||||
# client.py
|
||||
# --------------------------------------------------------------
|
||||
|
||||
# req. libs
|
||||
import socket
|
||||
import threading
|
||||
|
||||
|
||||
# global
|
||||
## connection data
|
||||
host = '127.0.0.1' # server ip
|
||||
port = 4444 # free/open port
|
||||
print(f"[#] connecting to {host}:{port}")
|
||||
|
||||
## nickname
|
||||
nickname = input("[+] enter nickname:")
|
||||
|
||||
## starting client
|
||||
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
client.connect((host, port))
|
||||
print(f"[+] connected to {host}:{port}")
|
||||
|
||||
|
||||
# listening to server & sending nickname
|
||||
def receive():
|
||||
while True:
|
||||
try:
|
||||
# receive msg
|
||||
msg = client.recv(1024).decode('ascii')
|
||||
|
||||
# print msg
|
||||
if msg == 'NICKNAME':
|
||||
client.send(nickname.encode('ascii'))
|
||||
else:
|
||||
print(msg)
|
||||
except:
|
||||
print("[!] error 404\n[#] terminating...")
|
||||
client.close()
|
||||
break
|
||||
|
||||
# send msg to server
|
||||
def write():
|
||||
while True:
|
||||
msg = f"{nickname}: {input('')}"
|
||||
client.send(msg.encode('ascii'))
|
||||
|
||||
|
||||
# starting threads for listening & writing
|
||||
receive_thread = threading.Thread(target=receive)
|
||||
receive_thread.start()
|
||||
|
||||
write_thread = threading.Thread(target=write)
|
||||
write_thread.start()
|
90
Codes/Code-B8 (Server).py
Executable file
90
Codes/Code-B8 (Server).py
Executable file
@ -0,0 +1,90 @@
|
||||
# TCP (lan) based chatting app
|
||||
|
||||
# --------------------------------------------------------------
|
||||
# server.py
|
||||
# --------------------------------------------------------------
|
||||
|
||||
|
||||
# req. libs
|
||||
import socket
|
||||
import threading
|
||||
|
||||
|
||||
|
||||
# global
|
||||
## connection data
|
||||
host = '127.0.0.1' # server ip
|
||||
port = 4444 # free/open port
|
||||
|
||||
## starting server
|
||||
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
# AF_INET - using internal socket, rather than unix socket
|
||||
# SOCK_STREAM - using tcp (& not udp)
|
||||
server.bind((host,port))
|
||||
server.listen()
|
||||
|
||||
## clients & nicknames
|
||||
clients = []
|
||||
nicknames = []
|
||||
|
||||
print(f"[+] Server is running on {host}:{port}")
|
||||
|
||||
|
||||
# send msg to all clients
|
||||
def broadcast(msg):
|
||||
for client in clients:
|
||||
client.send(msg)
|
||||
|
||||
|
||||
# handling clients
|
||||
def handle(client):
|
||||
while True:
|
||||
try:
|
||||
msg = client.recv(1024)
|
||||
broadcast(msg)
|
||||
except:
|
||||
# disconnecting inactive clients
|
||||
index = clients.index(client)
|
||||
|
||||
# del f/ clients
|
||||
try: clients.remove(index)
|
||||
except: pass
|
||||
client.close()
|
||||
|
||||
# del f/ nicknames
|
||||
nickname = nicknames.index(index)
|
||||
nicknames.remove(nickname)
|
||||
|
||||
# display
|
||||
print(f"[-] '{nickname}' left")
|
||||
break
|
||||
|
||||
|
||||
# listening
|
||||
def receive():
|
||||
while True:
|
||||
# accept conn
|
||||
client, addr = server.accept()
|
||||
print(f"[+] '{str(addr)}' connected")
|
||||
|
||||
# request & store nickname
|
||||
client.send('NICKNAME'.encode('ascii'))
|
||||
nickname = client.recv(1024).decode('ascii')
|
||||
|
||||
# store
|
||||
clients.append(client)
|
||||
nicknames.append(nickname)
|
||||
|
||||
# display
|
||||
print(f"[+] '{nickname}' connected")
|
||||
|
||||
# send msg
|
||||
broadcast(f"[#] {nickname} connected to the server\n".encode('ascii'))
|
||||
|
||||
# handle
|
||||
client_handler = threading.Thread(target=handle, args=(client,))
|
||||
client_handler.start()
|
||||
|
||||
|
||||
receive()
|
||||
|
@ -55,6 +55,8 @@ This Git repository is a comprehensive resource for the Computer Networks and Se
|
||||
- [Write-up - A7](https://git.kska.io/sppu-te-comp-content/ComputerNetworksAndSecurity/src/branch/main/Write-ups/Write-up%20-%20B7.pdf)
|
||||
|
||||
##### B8 - TCP Socket
|
||||
- [Code-B8 (Client)](https://git.kska.io/sppu-te-comp-content/ComputerNetworksAndSecurity/src/branch/main/Codes/Code-B8%20%28Client%29.py)
|
||||
- [Code-B8 (Server)](https://git.kska.io/sppu-te-comp-content/ComputerNetworksAndSecurity/src/branch/main/Codes/Code-B8%20%28Server%29.py)
|
||||
- [Handout-B8](https://git.kska.io/sppu-te-comp-content/ComputerNetworksAndSecurity/src/branch/main/Handouts/Handout-B8.pdf)
|
||||
- [Write-up - B8](https://git.kska.io/sppu-te-comp-content/ComputerNetworksAndSecurity/src/branch/main/Write-ups/Write-up%20-%20B8.pdf)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user