[我创建一个套接字时未定义]

问题描述 投票:0回答:1

我有一个程序,它仅通过tkinter接口将消息发送到服务器。我正在使用各种子程序来运行诸如开始新连接和发送消息之类的基本操作。唯一的问题是,当用户has通过另一个子程序建立连接时,它会不断出现名称错误“未定义clientsocket”。

我尝试过移动子程序,使clientocket成为全局变量,并且我再次检查了我的名字是否正确。我从功能优良的程序中获得了这些子程序的代码(一个聊天程序,该程序在我之前创建的控制台中运行),所以它一定是我构造程序的方式。

这里是处理套接字的所有子程序

def send_msg(): # Sends a message to the server (called from tkinter button)
        try:
            Csend = field.get("1.0", "end-1c")
            Csend = str(Csend)
            clientsocket.send(Csend.encode())

            field.delete()
            field.insert(END, "")
        except error as err:
            Csend = field.get("1.0", "end-1c") # 1.0 - Line one, char zero
            print(f"Can't send message \"{Csend}\": Not connected to a server")
            print(err)

    def new_connection():
        # Tkinter code goes here
        def connect_server(): # Tries to connect to the server
            try: # This runs the first check, if there is an existing connection
                clientsocket.close()
            except:
                print("No existing connection")

            try: # Runs the second check, if it can connect using the info
                clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

                host = host_ent.get() # Gets STR of host IP
                port = port_ent.get() # Gets STR of port
                port = int(port) # Converts port to INT

                clientsocket.connect((host, port)) # Connects to the server
            except:
                print("Could not connect, incorrect inputs?")

    def disconnect_server():
        try:
            clientsocket.close()
        except:
            print("No existing connection")

所有这些子程序都从tkinter菜单栏或按钮中调用。

我对套接字很陌生,因此,如果任何代码是初学者级别的,那么我都很抱歉。

谢谢您的帮助!

python sockets nameerror
1个回答
0
投票

问题是,您没有全局定义套接字,而仅在函数中定义了本地。您应该在使用客户套接字的每个函数的标题下添加global clientsocket

© www.soinside.com 2019 - 2024. All rights reserved.