Teleger 2017-09-11 12:36 采纳率: 0%
浏览 428
已结题

我想通过 'change' 按键 来改变不同显示 (多个客户端的发来的数据,至少两个客户端以上)

class MyServer(SocketServer.BaseRequestHandler):
def setup(self):
ip = self.client_address[0].strip()
port = self.client_address[1]
#print(ctime()+', '+ip+":"+str(port)+" is connect!")#打印连接的客户端ip  以及端口

def handle(self):
connect = self.request

    max_row    = Queue(256); 
    min_row    = Queue(256);
    count      = 0

    self.f     = Figure()   
    self.canvas = FigureCanvasTkAgg(self.f,master=root)
    self.canvas.get_tk_widget().grid(row=1,column=0,columnspan=4)
    self.adf        = self.f.add_subplot(111)
    while connect:
        try:
            data  = connect.recv(512) #data type is str
            bdata = [ord(x) for x in data] #bdata is list  
            pdata = np.array(bdata)
            odata = pdata[::2]*256 + pdata[1::2]     
            if bdata == None:
                break        

            max_row.enqueue(max(odata))
            min_row.enqueue(min(odata))
            count = count + 1
            if count == 4:
                self.adf.cla()
                self.adf.plot(max_row.queue,"g-")
                self.adf.plot(min_row.queue,"r-")
                self.adf.set_xlim(0,260)
                self.adf.set_ylim(0,4095)
                self.adf.set_title(self.client_address[0].strip()) 
                self.canvas.show()
                count = 0
            bdata = None
        except socket.error,arg:
            (errno,err_msg)=arg
            print "server failed:%s,errno=%d"%(err_msg,errno) 
    if connect:
         connect.close()

class ThreadedTcpServer(SocketServer.ThreadingMixIn,SocketServer.TCPServer):
 pass

class Watcher():
def init(self):
self.child = os.fork()
if self.child == 0:
return
else:
self.watch()
def watch(self):
try:
os.wait()
except KeyboardInterrupt:
self.kill()
sys.exit()
def kill(self):
try:
os.kill(self.child,signal.SIGKILL)
except OSError:
pass
#新开一个进程监控输入,如果有ctrl+c的信号,则退出子线程
def main():
serverIP = MyServer.inputEntry.get()
if serverIP == '':
return
server = ThreadedTcpServer((serverIP,port),MyServer)
server_thread = threading.Thread(target=server.serve_forever)
server_thread.deamon = True
server_thread.start()

def changeFun():
pass

if name == '__main__':

matplotlib.use('TkAgg')
Watcher()
root = Tk()

Label(root,text='server ip:').grid(row=0,column=0)#标签控件
MyServer.inputEntry = Entry(root)
MyServer.inputEntry.insert(0,'192.168.1.99')#默认服务器ip
MyServer.inputEntry.grid(row=0,column=1)#文本框控件

Button(root,text='start server',command= main).grid(row=0,column=2)
Button(root,text='change',command=changeFun).grid(row=0,column=3)


root.mainloop()#启动事件循环

#问题的问题是,多个客户端连接时,最后连接的 把之前的给 覆盖掉了,只显示最后的那个客户端发来的数据,
#数据成波形动态显示了,子图的标题为 该客户端的IP

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥50 通过下面文章的方法求手机号段
    • ¥15 有偿求码,CNN+LSTM实现单通道脑电信号EEG的睡眠分期评估
    • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
    • ¥50 成都蓉城足球俱乐部小程序抢票
    • ¥15 yolov7训练自己的数据集
    • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
    • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
    • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
    • ¥20 matlab yalmip kkt 双层优化问题
    • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体