Skip to content

Instantly share code, notes, and snippets.

@ankurs
Created July 12, 2009 05:29
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ankurs/145536 to your computer and use it in GitHub Desktop.
Save ankurs/145536 to your computer and use it in GitHub Desktop.
## 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