Skip to content

Instantly share code, notes, and snippets.

@mnl
Created October 25, 2018 07:07
Show Gist options
  • Save mnl/11ab4b22d3d830a1882adbd04dc3059c to your computer and use it in GitHub Desktop.
Save mnl/11ab4b22d3d830a1882adbd04dc3059c to your computer and use it in GitHub Desktop.
import socket
import select
connections = []
buffer = 1024
port = 9876
servsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#servsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
servsock.bind(("172.20.200.220", port))
servsock.listen(99)
connections.append(servsock)
print("Chat server has started on port: {}".format(port))
global addr
def broadcast(sock, msg, addr=None):
for s in connections:
print(addr)
if s != sock and s != servsock:
try:
s.send("{}: {}".format(addr, msg).encode())
except:
s.close()
connections.remove(s)
while True:
readsock, writesock, errsock = select.select(connections, [], [])
for sock in readsock:
if sock == servsock:
sockfd, addr = servsock.accept()
print("Sockfd",sockfd)
connections.append(sockfd)
print("Client {} connected".format(addr))
broadcast(sockfd, "Client {} has connected".format(addr))
else:
try:
data = sock.recv(buffer)
if data:
print(data.decode())
sock.send(data)
broadcast(sock, data.decode(), addr)
except:
broadcast(sock, "Client {} is offline".format(addr))
print("Client {} is offline".format(addr))
sock.close()
connections.remove(sock)
continue
servsock.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment