我的客户端上有一个断开连接按钮和一个连接按钮。当我单击断开连接按钮,然后单击连接按钮时,我得到以下信息: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()
为什么单击断开连接按钮后不能再次连接?重新打开插座是不可能的吗?我已经在这个问题上停留了大约一个月了,但我不明白为什么。
答案 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))
...