Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 5th, 2012  |  syntax: None  |  size: 1.29 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. import socket
  2. import struct
  3.  
  4. HOST = '127.0.0.1'
  5. PORT = 30004
  6.  
  7. def socket_send(socket, line):
  8.     def _send_internal(data):
  9.         no = len(data)
  10.         st = 0
  11.         while st < no:
  12.             i = socket.send(data[st:])
  13.             if i == 0:
  14.                 return False
  15.             st += i
  16.         return True
  17.  
  18.     if _send_internal(struct.pack('i', len(line))):
  19.         if _send_internal(line):
  20.             return True
  21.  
  22.     return False
  23.  
  24. def socket_recv(socket):
  25.     def _read_internal(length):
  26.         st = 0
  27.         msg = ''
  28.         while st < length:
  29.             i = socket.recv(length - st)
  30.             if i == '':
  31.                 return msg
  32.             msg += i
  33.             st += len(msg)
  34.         return msg
  35.  
  36.     data = _read_internal(4)
  37.     if len(data) == 4:
  38.         length = struct.unpack('i', data)[0]
  39.         data = _read_internal(length)
  40.         if len(data) == length:
  41.             return data
  42.  
  43.     raise Exception('whatever...')
  44.  
  45.  
  46. server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  47. # Bind!
  48. server_socket.bind(('127.0.0.1', 30004))
  49.  
  50. # Now listen.
  51. server_socket.listen(1)
  52.  
  53. (clientsocket, address) = server_socket.accept()
  54.  
  55. while True:
  56.     line = socket_recv(clientsocket)
  57.     if socket_send(clientsocket, line):
  58.         continue