1

サーバーから受信した特定の文字列メッセージへの応答として、メッセージ (文字列) をサーバー (サーバー A など) に送信しようとしています。サーバーにメッセージを送信するためにクライアント接続を使用しました。上記のサーバーからメッセージを受信するために、ソケットモジュールを使用して独自のサーバー (サーバー B など) を作成しました。特定のメッセージを受信した場合、クライアントはそのサーバー A にメッセージを送信する必要があります。クライアントとサーバーの両方が同時に動作できるように、スレッドを使用しました。

これが私のクライアント スクリプト (socket1.py) です。

import socket
import time

s = socket.socket()
s2 = socket.socket()

class MyClient():
    def __init__(self):
        self.s=socket.socket()

    def start(self):
        self.s.connect(('localhost',6000))
        self.s.settimeout(1000)
        self.s.send('JOIN#')

        while True:
            if self.s.gettimeout():
                break

    def move(self):
        self.s.send('LEFT#')

    def close(self):
        self.s.close()


def socStart():   

    global s,s2

    s.connect(('localhost',6000))
    #s2.connect(('localhost',6000))  

    s.send('JOIN#')  

    #time.sleep(10)
    #s.send('DOWN#')  

    #s.close()

def move():
    global s1    
    s1.send('DOWN#')

def close():
    global s,s2

    s.close()
    #s2.close()

これが私のサーバースクリプトです(server1.py)

import socket

class MyServer():
    def __init__(self):
        self.s= socket.socket()

    def serStart(self):
        self.s.bind(('localhost',7000))
        #self.s.settimeout(30)
        self.s.listen(5)
        self.started = False

        while True:
            self.c, self.addr = self.s.accept()
            self.msg = self.c.recv(1024)
            if self.msg[0] == 'S':                
                self.started = True
            print self.addr, '>>', self.msg
            self.c.close()

            if self.s.gettimeout():
                break

        self.s.close()

    def getStarted(self):
        return self.started

これは、socket1 と server1 モジュールの両方でスレッドを使用したスクリプトです。

import threading
import datetime
import socket1
import server1
import time

class ThreadClass(threading.Thread):

    def initialize(self,client,server):        
        self.client = client
        self.server = server

    def run(self):
        self.client.start()

        if self.server.getStarted():            
            self.client.move()

        self.client.close()

class ThreadServer(threading.Thread):

    def initialize(self, client, server):        
        self.client = client
        self.server = server

    def run(self):
        self.server.serStart()

client = socket1.MyClient()
server = server1.MyServer()

t = ThreadClass()
tS=ThreadServer()

t.initialize(client, server)
tS.initialize(client, server)

t.start()
tS.start()

サーバークラスは変更されますが、それは True に変数を開始しましたが、move メソッドは では機能しませんThreadClass。Python で外部サーバーを使用して、そのようなイベントのトリガーと応答を実行するにはどうすればよいですか?

4

0 に答える 0