1

I'm trying to send a message (a string) to a server (say server A) as a response to a particular string message received from the server. I've used a client connection to send messages to the server. I've created my own server (say server B) using socket module to receive the messages from the the above mentioned server. If a certain message is received, to client should send a message to that server A. I used threads so that both my client and server can work concurrently.

Here's my client script (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()

Here's my server script (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

Here's the script in which I used threads with both socket1 & server1 module.

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()

Though server class changes it's started varialble to True the move method doesn't work in ThreadClass. How do I perform such event triggering and responding accordingly with a outside server in python?

4

0 回答 0