Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python套接字编程:连接到服务器时应用程序冻结_Python_Sockets_Windows 8_Network Programming - Fatal编程技术网

Python套接字编程:连接到服务器时应用程序冻结

Python套接字编程:连接到服务器时应用程序冻结,python,sockets,windows-8,network-programming,Python,Sockets,Windows 8,Network Programming,我不熟悉Python中的套接字编码,我编写了这个简单的函数来连接到服务器。它在tkinter窗口中运行。我有一个条目小部件,您可以在其中输入要连接的服务器的IP地址。但是,当您单击按钮进行连接时,应用程序将挂起并冻结。下面是代码 def Test(self): socket.setdefaulttimeout(5) lengthInfo = self.lengthEntry.get() if self.portEntry.get() != '': port

我不熟悉Python中的套接字编码,我编写了这个简单的函数来连接到服务器。它在tkinter窗口中运行。我有一个
条目
小部件,您可以在其中输入要连接的服务器的IP地址。但是,当您单击按钮进行连接时,应用程序将挂起并冻结。下面是代码

def Test(self):
    socket.setdefaulttimeout(5)
    lengthInfo = self.lengthEntry.get()
    if self.portEntry.get() != '':
        portInfo = int(self.portEntry.get())
    serverInfo = self.serverEntry.get()
    conn = socket.socket()
    if not self.portEntry.get():
        portInfo = 80
    try:
        conn = socket.socket()
        name = socket.gethostbyname(serverInfo)
        conn.connect((name,portInfo))
        ans = conn.recv(2048)
        self.outputWindow.insert(END, "Connection successful: \n \
        port:{}, server:{} ('{}'), '{}' \n".format(portInfo, name, serverInfo, \
        ans))
        return
    except Exception as e:
        self.outputWindow.insert(END, str(e) + "\n")
我最初认为这是因为现在有超时,但正如您所看到的,我在代码的第一行添加了5秒超时。我认为这是因为应用程序在连接时遇到了一些问题,但我检查了Windows任务管理器,在网络部分下没有任何活动。我也在Ubuntu 14.04中运行了这个程序,但得到了相同的结果。
有解决方案吗?

套接字等待来自服务器的2048个字节(
conn.recv(2048)
),我猜它们永远不会到达。

通过阅读文档,可以预期
socket.setdefaulttimeout(5)
会使
recv()
在这种情况下在5秒后失败。我尝试将字节数调低,首先是1024,然后是512,然后返回到128,但得到的结果是相同的。recv()将在有字节给您时立即返回;它不会等到完全达到您指定的字节数。(但返回的字节数不会超过指定的字节数)是否确实正在调用recv()?您可能在connect()调用中被阻止(甚至可能在gethostbyname()调用中被阻止)。