【问题标题】:socket.accept() hangs my programsocket.accept() 挂起我的程序
【发布时间】:2014-02-13 09:50:51
【问题描述】:

我正在尝试创建可以通过 python 中的套接字进行通信的应用程序。我已经能够在控制台程序中实现这一点,并试图在 WPF 中做同样的事情。这是一个非常简单的程序,应该充当服务器在创建套接字的地方,绑定到端口然后侦听连接。我现在面临的问题是,每次我包含套接字接受连接的代码时,我的程序都会挂起。我试图在网上寻找解决方案,但每个人似乎都在做和我一样的做法。以前有没有人遇到过这个问题,如果有,你是如何解决的。 在此先感谢您的帮助。

这是代码:

import wpf
import socket
import sys
import clr
import System


HOST=''
PORT = 8888

from System.Windows import Application, Window

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)


class MyWindow(Window):
    def __init__(self):
        wpf.LoadComponent(self, 'managementToolSimulator2.xaml')


    def Button1_Click(self, sender, e):
        pass

    def Window_Loaded(self, sender, e):
        s.bind((HOST,PORT))
        s.listen(5)
        self.ListBox1.AddText('Listening...')

        while 1:
            conn,addr=s.accept()
            self.ListBox1.AddText('Got connection')
        pass


if __name__ == '__main__':
    Application().Run(MyWindow())

如果我在没有行的情况下运行程序:

     while 1:
        conn,addr=s.accept()
        self.ListBox1.AddText('Got connection')

它运行良好,但如果我包含程序挂起的行并且必须从任务管理器中停止。

【问题讨论】:

  • 它正在等待连接。 s.accept() 是一个阻塞语句。
  • 好像你也有类似的问题。看看4. and 5.
  • 感谢您的帮助。现在可以使用了。

标签: python wpf sockets


【解决方案1】:

线程关闭服务器。

您不得在 GUI 事件处理程序中进行阻塞调用。 GUI 线程必须及时处理 Windows 消息 - 您不能只在处理程序中阻止执行。

【讨论】:

  • 哦..现在我明白了..有道理..感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 2014-11-28
  • 2011-05-10
  • 2013-01-16
  • 2015-05-18
  • 1970-01-01
  • 2015-07-09
相关资源
最近更新 更多