Skip to content

运行TCP服务器时报错 #4

Description

@yujiebing

Traceback (most recent call last):
File "C:\Users\20762\anaconda3\envs\databasetry\lib\threading.py", line 932, in _bootstrap_inner
self.run()
File "C:\Users\20762\anaconda3\envs\databasetry\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\20762\Downloads\NetAssist_PyQt-main\src\Network\Tcp.py", line 57, in tcp_server_concurrency
for client, address in self.client_socket_list:
AttributeError: 'MainWindow' object has no attribute 'client_socket_list',报错原因是:Tcp.py中的tcp_server_concurrency函数出错,具体如下:
for client, address in self.client_socket_list:
try:
recv_msg = client.recv(4096)
except Exception as ret:
pass
else:
if recv_msg:
info = recv_msg.decode("utf-8")
msg = f"来自IP:{address[0]}端口:{address[1]}:"
self.tcp_signal_write_msg.emit(msg)
self.tcp_signal_write_info.emit(info, self.InfoRec)

                else:
                    client.close()
                    self.client_socket_list.remove((client, address))

如上代码段,应在前面的else条件语句下,而非与else平级
修改后的完整tcp_server_concurrency代码如下:
def tcp_server_concurrency(self):
"""
功能函数,供创建线程的方法;
使用子线程用于监听并创建连接,使主线程可以继续运行,以免无响应
使用非阻塞式并发用于接收客户端消息,减少系统资源浪费,使软件轻量化

    :return: None
    """
    while True:
        try:
            client_socket, client_address = self.tcp_socket.accept()
        except Exception as ret:
            sleep(0.002)
        else:
            client_socket.setblocking(False)
            # 将创建的客户端套接字存入列表,client_address为ip和端口的元组
            self.client_socket_list.append((client_socket, client_address))
            msg = f"TCP服务端已连接IP:{client_address[0]}端口:{client_address[1]}\n"
            self.tcp_signal_write_msg.emit(msg)
            # 轮询客户端套接字列表,接收数据
            for client, address in self.client_socket_list:
                try:
                    recv_msg = client.recv(4096)
                except Exception as ret:
                    pass
                else:
                    if recv_msg:
                        info = recv_msg.decode("utf-8")
                        msg = f"来自IP:{address[0]}端口:{address[1]}:"
                        self.tcp_signal_write_msg.emit(msg)
                        self.tcp_signal_write_info.emit(info, self.InfoRec)

                    else:
                        client.close()
                        self.client_socket_list.remove((client, address))

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions