我使用glade作为我的gui并创建一个进程来运行我的gui。单击此应用程序将打开套接字。当我按下'send'时,它将把textfield中的任何内容发送到套接字。套接字接收这些数据并将其发回。问题是在我把数据发送到套接字之后,线程没有终止。在我关闭图形用户界面后,它还调用系统出口()但也会离开进程并且不会终止。我认为错误在于我如何实现我的流程或我的所有流程。有人能照一下这个吗?这也与我上一篇文章有关。谢谢
在主.py在
//为我的gui创建新进程并显示它的主线程import socket, thread, gtk, Handler, sys, os, multiprocessing
sys.setrecursionlimit(10000)
if __name__ == '__main__':
builder = gtk.Builder()
#32bit template.glade 64bit template-2.22
# @todo add switching between architectures
#
builder.add_from_file("template/template-2.22.glade")
builder.connect_signals(Handler.Handler(builder))
window = builder.get_object("window1")
window.show_all()
try:
p = multiprocessing.Process(target=gtk.main())
p.start()
except:
print "Error Starting new Thread"
在处理程序.py在
//gtk glade信号的处理程序,创建新线程和句柄按钮等
^{pr2}$
在服务器.py在
//打开一个套接字,监听传入的数据并发送回import socket,multiprocessing, gtk, sys
class Server:
'''
classdocs
'''
def __init__(self):
'''
Constructor
'''
def run(self):
try:
while 1:
HOST = 'localhost' # Symbolic name meaning the local host
PORT = 50006 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))
s.listen(5)
conn, addr = s.accept()
print 'Connected by', addr
while True:
data = conn.recv(1024)
if not data:
conn.close()
sys.exit()
break
elif data != '':
conn.sendall(data)
break
print "Closing"
#conn.close()
finally:
print "End"
pass
在客户端.py在
//将文本区域内的内容发送到套接字import time
class MyClass:
'''
classdocs
'''
def __init__(self):
'''
Constructor
'''
def run(self,text):
try:
import socket
HOST = 'localhost' # The localhost
PORT = 50006 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(text)
data = s.recv(1024)
while 1:
if data != '':
print 'Received', repr(data)
break
finally:
pass