Python 套接字编程:连接到服务器时应用程序冻结
Python Socket Programming: Application freezes when connecting to a server
我是 Python 中的套接字编码新手,我编写了这个简单的函数来连接到服务器。它在 tkinter window 中运行。我有一个 Entry
小部件,您可以在其中输入要连接的服务器的 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 任务管理器,在网络部分下没有 activity。我也 运行 Ubuntu 14.04 中的程序,但得到了相同的结果。
有什么解决办法吗?
套接字等待来自服务器的 2,048 个字节 (conn.recv(2048)
),我猜它们永远不会到达。
我是 Python 中的套接字编码新手,我编写了这个简单的函数来连接到服务器。它在 tkinter window 中运行。我有一个 Entry
小部件,您可以在其中输入要连接的服务器的 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 任务管理器,在网络部分下没有 activity。我也 运行 Ubuntu 14.04 中的程序,但得到了相同的结果。 有什么解决办法吗?
套接字等待来自服务器的 2,048 个字节 (conn.recv(2048)
),我猜它们永远不会到达。