2017-02-13 30 views
0

私はPythonでサーバソケットをスレッディングします。私はインターネットからこのコードを見つけました。私はかなりうまくいくが、私は何が起こっているのか分からない。 誰でも簡単に説明できるので、メインからMiTcpHandlerクラスにデータを送信したいと思います。どうやってやるの?サーバソケットをPythonでスレッディングする

import SocketServer 
import threading 
import time 

class MiTcpHandler(SocketServer.BaseRequestHandler): 
    def handle(self): 
     data = "" 
     while data != 'End': 
      data = self.request.recv(1024) 
      print data 
      time.sleep(0.1) 


class ThreadServer(SocketServer.ThreadingMixIn,SocketServer.ForkingTCPServer): 
    pass 

def Main(): 
    host='' 
    port = 9998 
    server = ThreadServer((host,port),MiTcpHandler) 
    server_thread = threading.Thread(target=server.serve_forever) 
    server_thread.start() 


Main() 
+0

「SocketServer」モジュールのドキュメントを読むことをお勧めします。https://docs.python.org/2/library/socketserver.html – mhawke

答えて

0

コメントに記載されているとおり、SocketServerモジュールのマニュアルをお読みください。それを使用する方法の例が含まれています。これから、コードの仕組みを理解することができます。

"main"からスレッドにデータを送信する方法については、サーバーへのTCP接続(同じホスト上のポート9998)を確立する必要があります。あなたはそのためのsocket.create_connection()を使用することができます。

def Main(): 
    host='' 
    port = 9998 
    server = ThreadServer((host,port),MiTcpHandler) 
    server_thread = threading.Thread(target=server.serve_forever) 
    server_thread.start() 

    # connect to the server and send some data 
    import socket 
    s = socket.create_connection(('localhost', 9998)) 
    s.send('hi there\n') 
    s.send('End\n') 

これは、クライアントとして動作している主な機能からサーバーにデータを送信します。接続の終了と終端の文字列の検出を適切に処理するには、ハンドラでもう少し作業を行う必要があることに注意してください。"End"文字列

+0

ソケットからデータを送信したくありません。私はargsか何かを__init__などから送信したい – user3575812

関連する問題