Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>This post helped me get over the un-closed socket problem. I had the same problem and wanted to post here my simple implementation for TCP server class (and client method).</p> <p>I made a <code>TCPThreadedServer</code> class. In order to use it is needed to be inherited, and the method <code>process(msg)</code> must be overridden. the overridden method invokes every time the server gets a message <code>msg</code>, and if it returns a not <code>None</code> object, it will be returned as string to the connected client.</p> <pre><code>from SocketServer import TCPServer, StreamRequestHandler, ThreadingMixIn import threading class TCPThreadedServer(TCPServer, ThreadingMixIn): class RequstHandler(StreamRequestHandler): def handle(self): msg = self.rfile.readline().strip() reply = self.server.process(msg) if reply is not None: self.wfile.write(str(reply) + '\n') def __init__(self, host, port, name=None): self.allow_reuse_address = True TCPServer.__init__(self, (host, port), self.RequstHandler) if name is None: name = "%s:%s" % (host, port) self.name = name self.poll_interval = 0.5 def process(self, msg): """ should be overridden process a message msg - string containing a received message return - if returns a not None object, it will be sent back to the client. """ raise NotImplemented def serve_forever(self, poll_interval=0.5): self.poll_interval = poll_interval self.trd = threading.Thread(target=TCPServer.serve_forever, args = [self, self.poll_interval], name = "PyServer-" + self.name) self.trd.start() def shutdown(self): TCPServer.shutdown(self) TCPServer.server_close(self) self.trd.join() del self.trd </code></pre> <p>I found it quite easy to use:</p> <pre><code>class EchoServerExample(TCPThreadedServer): def __init__(self): TCPThreadedServer.__init__(self, "localhost", 1234, "Server") def process(self, data): print "EchoServer Got: " + data return str.upper(data) for i in range(10): echo = EchoServerExample() echo.serve_forever() response = client("localhost", 1234, "hi-%i" % i) print "Client received: " + response echo.shutdown() </code></pre> <p>I used the method: import socket</p> <pre><code>def client(ip, port, msg, recv_len=4096, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): msg = str(msg) response = None sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: sock.connect((ip, port)) if timeout != socket._GLOBAL_DEFAULT_TIMEOUT: sock.settimeout(timeout) sock.send(msg + "\n") if recv_len &gt; 0: response = sock.recv(recv_len) finally: sock.close() return response </code></pre> <p>Enjoy it!</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload