Skip to content

运行TCP服务器时报错 #4

@yujiebing

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))

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