Created
July 12, 2009 05:29
-
-
Save ankurs/145536 to your computer and use it in GitHub Desktop.
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
## python socket chat example | |
## author: Ankur Shrivastava | |
## licence: GPL v3 | |
#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