Skip to content

Instantly share code, notes, and snippets.

@jangsoopark
Created December 5, 2016 23:32
Show Gist options
  • Save jangsoopark/27cc5b8549aba10b86142d039a4770b1 to your computer and use it in GitHub Desktop.
Save jangsoopark/27cc5b8549aba10b86142d039a4770b1 to your computer and use it in GitHub Desktop.
Python - Simple TCP chatting Server/Client
#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
Created on 2013. 8. 5.
@author: kangstar
'''
from socket import *
import thread, time
import msvcrt as m
def recvMsg(sock):
while True:
recvmsg = sock.recv(1024)
print '<Server>>> ' + recvmsg
if __name__ == '__main__':
host = raw_input('HOST(default:localhost): ')
port = raw_input('PORT(default:8008): ')
host = host if (len(host) > 0) else 'localhost'
port = int(port) if (len(port) > 0) else 8008
try:
s = socket(AF_INET, SOCK_STREAM)
s.connect((host, port))
thread.start_new_thread(recvMsg, (s, ))
time.sleep(1)
nickmsg = raw_input('My Nickname: ')
s.send(nickmsg)
time.sleep(2)
print 'Wait!...'
while True:
if m.getch() != '\r':
continue
sendmsg = raw_input(' - Send: ')
if sendmsg == 'exit()':
break
s.send(sendmsg)
s.close()
except:
print 'Wrong address!'
raw_input('Exit client (Press any key!)')
#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
Created on 2013. 8. 5.
@author: kangstar
'''
from time import *
from SocketServer import *
HOST = ''
PORT = 8008
userlist = []
namelist = []
addr = (HOST, PORT)
def now():
return ctime(time())
def welcome():
return '''Welcome Kangstar Server
Local time is %s, %i user(s) online:%s
''' %(now(), len(userlist), repr(namelist))
class ClientHandler(BaseRequestHandler):
def handle(self):
userlist.append(self.request)
self.setnick()
sleep(3)
print self.connection()
self.request.send(welcome())
self.broadcast(self.connection())
print '[%i users online]\n' % len(userlist)
while True:
try:
data = self.request.recv(1024)
print '%s(%s): "%s"' % (self.nickname, self.client_address[0], data)
outgoing = '%s: %s' % (self.nickname, data)
self.broadcast(outgoing)
except:
print self.disconnection()
userlist.remove(self.request)
namelist.remove(self.nickname)
self.broadcast(self.disconnection())
self.request.close()
print '[%i user(s) online]\n' % len(userlist)
return
def broadcast(self, data):
for user in userlist:
user.send(data)
def disconnection(self):
return '(%s)%s disconnected at %s\n' % (self.nickname, self.client_address[0], now())
def connection(self):
return '(%s)%s connected at %s\n' % (self.client_address[0], self.nickname, now())
def setnick(self):
self.request.send('Send your nickname!')
self.nickname = self.request.recv(1024)
self.request.send('Welcome, %s!\n' % self.nickname)
namelist.append(self.nickname)
server = ThreadingTCPServer(addr, ClientHandler)
if __name__ == '__main__':
print welcome()
print 'Server started. Listening for connections on port %i...\n' % PORT
server.serve_forever()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment