Created
December 1, 2012 22:57
-
-
Save jsam/4185756 to your computer and use it in GitHub Desktop.
pure python chat example
This file contains hidden or 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
#server | |
import socket | |
import threading | |
import time | |
SIZE = 4 | |
soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM) | |
soc.bind(('127.0.0.1',5432)) | |
soc.listen(5) | |
class CThread(threading.Thread): | |
def __init__(self,c): | |
threading.Thread.__init__(self) | |
self.conn = c | |
self.stopIt=False | |
def mrecv(self): | |
data = self.conn.recv(SIZE) | |
self.conn.send('OK') | |
msg = self.conn.recv(int(data)) | |
return msg | |
def run(self): | |
while not self.stopIt: | |
msg = self.mrecv() | |
print 'recieved-> ',msg | |
def setConn(con1,con2): | |
dict={} | |
state = con1.recv(9) | |
con2.recv(9) | |
if state =='WILL RECV': | |
dict['send'] = con1 # server will send data to reciever | |
dict['recv'] = con2 | |
else: | |
dict['recv'] = con1 # server will recieve data from sender | |
dict['send'] = con2 | |
return dict | |
def msend(conn,msg): | |
if len(msg)<=999 and len(msg)>0: | |
conn.send(str(len(msg))) | |
if conn.recv(2) == 'OK': | |
conn.send(msg) | |
else: | |
conn.send(str(999)) | |
if conn.recv(2) == 'OK': | |
conn.send(msg[:999]) | |
msend(conn,msg[1000:]) # calling recursive | |
(c1,a1) = soc.accept() | |
(c2,a2) = soc.accept() | |
dict = setConn(c1,c2) | |
thr = CThread(dict['recv']) | |
thr.start() | |
try: | |
while 1: | |
msend(dict['send'],raw_input()) | |
except: | |
print 'closing' | |
thr.stopIt=True | |
msend(dict['send'],'bye!!!')# for stoping the thread | |
thr.conn.close() | |
soc.close() | |
#client | |
import socket | |
import threading | |
SIZE =4 | |
class client(threading.Thread): | |
def __init__(self,c): | |
threading.Thread.__init__(self) | |
self.conn = c | |
self.stopIt = False | |
def mrecv(self): | |
data = self.conn.recv(SIZE) | |
self.conn.send('OK') | |
return self.conn.recv(int(data)) | |
def run(self): | |
while not self.stopIt: | |
msg = self.mrecv() | |
print 'recieved-> ',msg | |
soc1 = socket.socket(socket.AF_INET,socket.SOCK_STREAM) | |
soc1.connect(('127.0.0.1',5432)) | |
soc1.send('WILL SEND') # telling server we will send data from here | |
soc2 = socket.socket(socket.AF_INET,socket.SOCK_STREAM) | |
soc2.connect(('127.0.0.1',5432)) | |
soc2.send('WILL RECV') # telling server we will recieve data from here | |
def msend(conn,msg): | |
if len(msg)<=999 and len(msg)>0: | |
conn.send(str(len(msg))) | |
if conn.recv(2) == 'OK': | |
conn.send(msg) | |
else: | |
conn.send(str(999)) | |
if conn.recv(2) == 'OK': | |
conn.send(msg[:999]) | |
msend(conn,msg[1000:]) # calling recursive | |
thr = client(soc2) | |
thr.start() | |
try: | |
while 1: | |
msend(soc1,raw_input()) | |
except: | |
print 'closing' | |
thr.stopIt=True | |
msend(soc1,'bye!!') # for stoping the thread | |
thr.conn.close() | |
soc1.close() | |
soc2.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
hi