Skip to content

Commit 054888e

Browse files
author
codehouseindia
authored
Merge pull request codehouseindia#346 from chiragarora01/master
Example of Socket Connection
2 parents ad3c3fa + 4269140 commit 054888e

3 files changed

Lines changed: 119 additions & 0 deletions

File tree

Basic Socket/clint.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from socket import AF_INET, socket, SOCK_STREAM
2+
from threading import Thread
3+
4+
HOST = "localhost"
5+
PORT = 5500
6+
ADDR = (HOST, PORT)
7+
BUFSIZ = 1024
8+
messages = []
9+
10+
client_socket = socket(AF_INET, SOCK_STREAM)
11+
client_socket.connect(ADDR)
12+
13+
14+
def receive_messages():
15+
while True:
16+
try:
17+
msg = client_socket.recv(BUFSIZ).decode()
18+
messages.append(msg)
19+
print(msg)
20+
except Exception as e:
21+
print("[EXCEPTION]", e)
22+
break
23+
24+
25+
def send_messages(msg):
26+
client_socket.send(bytes(msg, "utf8"))
27+
if msg == "{quit}":
28+
client_socket.close()
29+
30+
31+
receive_thread = Thread(target=receive_messages)
32+
receive_thread.start()
33+
send_messages("chirag")

Basic Socket/person.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Person:
2+
def __int__(self, addr, client):
3+
self.addr = addr
4+
self.client = client
5+
self.name = None
6+
7+
def set_name(self, name):
8+
self.name = name
9+
10+
def __repr__(self):
11+
return f"Person({self.addr},{self.name})"

Basic Socket/server.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
from socket import AF_INET, socket, SOCK_STREAM
2+
from threading import Thread
3+
import time
4+
from person import Person
5+
6+
HOST = "localhost"
7+
PORT = 5500
8+
ADDR = (HOST, PORT)
9+
MAX_CONNECTION = 1
10+
BUFFSIZ = 1024
11+
12+
persons = []
13+
SERVER = socket(AF_INET, SOCK_STREAM)
14+
SERVER.bind(ADDR)
15+
16+
17+
def broadcast(msg, name):
18+
for person in persons:
19+
client = person.client
20+
client.send(bytes(name, "utf8" + msg))
21+
22+
23+
def client_communication(person):
24+
'''handle all messages from client'''
25+
client = person.client
26+
27+
name = client.recv(BUFFSIZ).decode("utf8")
28+
person.set_name(name)
29+
msg = bytes(f"{name} has joined the chat", "utf8")
30+
broadcast(msg, name)
31+
32+
while True:
33+
try:
34+
msg = client.recv(BUFFSIZ)
35+
print(f"{name}:", msg.decode("utf8"))
36+
if msg == bytes("{quit}", "utf8"):
37+
broadcast(f"{name} has left the chat ...", "")
38+
client.send(bytes("{quit}", "utf8"))
39+
client.close()
40+
persons.remove(person)
41+
break
42+
else:
43+
broadcast(msg, name+": ")
44+
except Exception as e:
45+
print("[EXCEPTION]", e)
46+
break
47+
48+
49+
def wait_for_connection():
50+
'''wait for connection from new clients ,start new thread'''
51+
run = True
52+
while run:
53+
try:
54+
client, addr = SERVER.accept()
55+
person = Person(addr, client)
56+
persons.append(person)
57+
print(f"[CONNECTION] {addr} connected to server at {time.time()} ")
58+
Thread(target=client_communication, args=(person,)).start()
59+
except Exception as e:
60+
print("[EXCEPTION]", e)
61+
run = False
62+
63+
print("server crash")
64+
65+
66+
SERVER = socket(AF_INET, SOCK_STREAM)
67+
SERVER.bind(ADDR)
68+
69+
if __name__ == "__main__":
70+
SERVER.listen(MAX_CONNECTION)
71+
print("waiting for connection")
72+
ACCEPT_THREAD = Thread(target=wait_for_connection)
73+
ACCEPT_THREAD.start()
74+
ACCEPT_THREAD.join()
75+
SERVER.close()

0 commit comments

Comments
 (0)