Created
December 5, 2016 23:32
-
-
Save jangsoopark/27cc5b8549aba10b86142d039a4770b1 to your computer and use it in GitHub Desktop.
Python - Simple TCP chatting Server/Client
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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!)') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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