spacepaste

  1.  
  2. #!/usr/bin/env python
  3. # pyCHAT
  4. # author: Ahiri
  5. import socket
  6. import threading
  7. import sys
  8. mode = raw_input('Server(s) or Client(c) mode: ')
  9. while (mode=='c' or mode=='s')==False:
  10. print 'ERROR: Response must be "s" or "c"'
  11. mode = raw_input('Server(s) or Client(c) mode: ')
  12. if mode=='c':
  13. host = raw_input('Host address: ')
  14. 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':
  15. print 'ERROR: IP address not formatted correctly'
  16. host = raw_input('Host address: ')
  17. port = int(raw_input('Port: '))
  18. while port<0 or port>65535:
  19. print 'ERROR: Port number out of range'
  20. port = int(raw_input('Port: '))
  21. conn={}
  22. s=1
  23. r=0
  24. if mode=='c':
  25. #Start Client
  26. conn[s] = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  27. conn[s].connect((host,port))
  28. conn[s].send('::transmit')
  29. conn[r] = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  30. conn[r].connect((host,port))
  31. else:
  32. #Start Server
  33. socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  34. socket.bind(('',port))
  35. socket.listen(5)
  36. c1,a1 = socket.accept()
  37. c2,a2 = socket.accept()
  38. host = a1[0]
  39. if c1.recv(10)=='::transmit':
  40. conn[s] = c2
  41. conn[r] = c1
  42. else:
  43. conn[s] = c2
  44. conn[r] = c1
  45. del c1, a1, c2, a2, socket
  46. class receive(threading.Thread):
  47. def run(self):
  48. while 1:
  49. data = conn[r].recv(2048)
  50. if data:
  51. print '\033[92m'+data+'\033[0m'
  52. receive().start()
  53. try:
  54. while 1:
  55. conn[s].send(raw_input())
  56. except:
  57. print 'Disconnecting'
  58. conn[s].close()
  59. conn[r].close()
  60.