失去连接后如何让客户端套接字重新连接?

问题描述

我的服务器向客户端发送消息,客户端打印它们。我通过添加一个函数来让客户端重新连接,该函数检查连接是否有错误,如果有,它会重新创建套接字并再次连接。服务器还具有检查连接错误功能,如果有,则接受新的错误。但是,在该客户端不再接受消息之后,服务器会引发 brokenPipeError。

服务器:

import socket
import sys
import time
import threading
s = socket.socket()
ip = "localhost"
port = 7000
s.setsockopt(socket.soL_SOCKET,socket.so_REUSEADDR,1)
s.bind((ip,port))
s.listen(100)
def help():
    print("h = help | q = quit server | b = go back")
    print("message = type message | quit = quit the client")
help()
print("")
print("Waiting for connections....")
c,addr = s.accept()
def checkConnection():
        while socket.error:
            try:
                c,addr = s.accept()
            except:
                time.sleep(2)
threading.Thread(target=checkConnection).start()
def main():
    while True:
        msg = input("Input> ")
        if msg == "q":
            sys.exit(0)
        elif msg == "h":
            help()
        elif msg == "quit":
            c.send(bytes(msg,'utf-8'))
        elif msg == "message":
            c.send(bytes(msg,'utf-8'))
            while True:
                message = input("Message: ")
                if message == "b":
                    c.send(bytes(message,'utf-8'))
                    main()
                c.send(bytes(message,'utf-8'))
main()

客户:

import socket
import threading
import time
import sys
c = socket.socket()
ip = "localhost"
port = 7000
c.connect((ip,port))
def checkConnection():
        while socket.error:
            try:
                c = socket.socket()
                ip = "localhost"
                port = 7000
                c.connect((ip,port))
            except:
                time.sleep(2)
threading.Thread(target=checkConnection).start()
def main():
    while True:
        msg = c.recv(1024).decode()
        if msg == "message":
            while True:
                message = c.recv(1024).decode()
                if message == "b":
                    main()
                else:
                    print(message)
        elif msg == "quit":
            print("Goodbye!")
            break
main()

错误

Traceback (most recent call last):
  File "server.py",line 42,in <module>
    main()
  File "server.py",line 41,in main
    c.send(bytes(message,'utf-8'))
brokenPipeError: [Errno 32] broken pipe

非常感谢您的反馈;)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...