2014-03-26 29 views
1

執行兩個無限循環。 1 while多線程服務器循環和其他GUI無限循環。一起執行兩個無限循環。 1 while用於多線程服務器的循環和其他用於GUI的無限循環

GuI窗口未顯示。

我試圖同時執行服務器和GUI,現在GUI窗口未打開。

以下是代碼。

import socket 
import sys 
from thread import * 

from Tkinter import * 
import tkMessageBox 
blue ="#000fff000" 

root = Tk() 
frame = Frame(root) 
frame.pack() 
root.geometry("500x500") 
e=NONE 

frame=Frame(root) 
frame.pack() 

text_area = Text(frame) 
text_area.pack(side=BOTTOM) 

B1 = Button(root, text = "CLOSE", command = sys.exit) 
B1.pack(side =TOP) 
print "Hello" 


try: 
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
except socket.error,msg: 
    print "Socket Creation Error" 
    sys.exit(); 


print 'Socket Created' 
host = '' 
port = 9008 



try: 
    s.bind((host, port)) 
except socket.error,msg: 
    print "Bind Failed"; 
    text_area.insert(END,"Bind failed") 
    sys.exit() 



text_area.insert(END,"Socket bind complete") 
s.listen(10) 
text_area.insert(END,"Socket now listening") 
a = [] 



def clientthread(conn): 
    global text_area 
    i=1024 
    while True: 
     data = conn.recv(1024)  
     text_area.insert(END,"\n") 
     text_area.insert(END,data) 
     i=i+1 
     text_area.insert(END,"\n") 
     reply = "Reply"+str(i) 
     text_area.insert(END,reply) 
     conn.send(reply) 

print "hello" 
print "bye" 


while True: 
    conn, addr = s.accept() 
    start_new_thread(clientthread,(conn,)) 

conn.close() 
s.close() 

回答

0

您需要啓動另一個線程套接字服務器的主循環。這將允許主線程運行UI。

只是這個代碼替換循環:

def server_thread(s): 
    while True: 
     conn, addr = s.accept() 
     start_new_thread(clientthread,(conn,)) 

start_new_thread(server_thread,(s,)) 
+0

我們將如何開始新的線程服務器套接字的主循環? – Botnet

+0

就像你爲'clientthread'所做的那樣:將主服務器循環移到一個函數中,並使用'start_new_thread()'在一個線程中調用它。 –

+0

先生,我們正試圖啓動另一個線程,但無法 您能否請詳細解釋一下我們該怎麼做 – Botnet