-
- #!/usr/bin/env python
-
- # pyCHAT
- # author: Ahiri
-
- import socket
- import threading
- import sys
-
- mode = raw_input('Server(s) or Client(c) mode: ')
- while (mode=='c' or mode=='s')==False:
- print 'ERROR: Response must be "s" or "c"'
- mode = raw_input('Server(s) or Client(c) mode: ')
- if mode=='c':
- host = raw_input('Host address: ')
- while len(host.split('.'))!=4 or host.split('.')[0]>'255' or host.split('.')[1]>'255' or host.split('.')[2]>'255' or host.split('.')[3]>'255':
- print 'ERROR: IP address not formatted correctly'
- host = raw_input('Host address: ')
- port = int(raw_input('Port: '))
- while port<0 or port>65535:
- print 'ERROR: Port number out of range'
- port = int(raw_input('Port: '))
- conn={}
- s=1
- r=0
- if mode=='c':
- #Start Client
- conn[s] = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
- conn[s].connect((host,port))
- conn[s].send('::transmit')
- conn[r] = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
- conn[r].connect((host,port))
- else:
- #Start Server
- socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
- socket.bind(('',port))
- socket.listen(5)
- c1,a1 = socket.accept()
- c2,a2 = socket.accept()
- host = a1[0]
- if c1.recv(10)=='::transmit':
- conn[s] = c2
- conn[r] = c1
- else:
- conn[s] = c2
- conn[r] = c1
- del c1, a1, c2, a2, socket
- class receive(threading.Thread):
- def run(self):
- while 1:
- data = conn[r].recv(2048)
- if data:
- print '\033[92m'+data+'\033[0m'
- receive().start()
- try:
- while 1:
- conn[s].send(raw_input())
- except:
- print 'Disconnecting'
- conn[s].close()
- conn[r].close()
-