有一个断开按钮和一个连接按钮?

时间:2018-12-29 18:07:08

标签: python python-3.x sockets

我的客户端上有一个断开连接按钮和一个连接按钮。当我单击断开连接按钮,然后单击连接按钮时,我得到以下信息:OSError: [WinError 10038] An operation was attempted on something that is not a socket

断开按钮的编码如下:

def Disconnect():
    s.shutdown(socket.SHUT_RDWR)
    s.close()

连接按钮是这个:

def Join1():
    print("CONNECTING TO: " + host + "...")
    try:
        s.connect((host, port))
        print("CONNECTING TO: " + host + " ESTABLISHED!")

        statusbar_status = "Connected"
        startrecv = Thread(target=returnrecv)
        startrecv.start()

为什么单击断开连接按钮后不能再次连接?重新打开插座是不可能的吗?我已经在这个问题上停留了大约一个月了,但我不明白为什么。

1 个答案:

答案 0 :(得分:1)

关闭套接字后,您将无法重用它在服务器和客户端之间共享其他数据。 从Python Docs开始,关于close()方法:

  

关闭插槽。套接字对象上所有以后的操作都将   失败。远端将不再接收任何数据(在排队的数据被   酡)。套接字在关闭时会自动关闭   垃圾收集。

因此,您每次尝试连接时都需要创建一个新的套接字对象(在您的 join1()函数看起来像这样:

def Join1():
    global s     # i would recommend using classes instead
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)      # your socket object
    print("CONNECTING TO: " + host + "...")
    try:
        s.connect((host, port))
        ...