python - ConnectionResetError:[Errno 104] 对等方重置连接
问题描述
我试图在 python3 中使用套接字创建一个简单的聊天室。当我在本地主机上运行我的服务器并使用多个终端设置客户端时,一切都很顺利。当我尝试通过连接到同一 LAN 网络的另一个系统连接到服务器(托管在我的系统上)时,出现了此错误。
ConnectionResetError: [Errno 104] Connection reset by peer
当我一次又一次尝试从第二个系统重新连接时,它给了我另一个错误
BrokenPipeError: [Errno 32] Broken pipe
这是我的 server.py
from socket import AF_INET, SOCK_STREAM, socket
from threading import Thread
HOST = "192.168.157.206"
PORT = 3000
addresses = {}
clients = {}
def Connections():
while True:
client, addr = server.accept()
print("{} is connected!!".format(addr))
client.send(("Welcome to Chat Room. Type {quit} to exit. Enter your name: ").encode("utf-8"))
addresses[client] = addr
Thread(target = ClientConnection, args=(client, )).start()
def ClientConnection(client):
name = client.recv(BufferSize).decode("utf-8")
client.send(("Hello {}".format(name)).encode("utf-8"))
message = ("{} has joined the chat..").format(name)
Broadcast(message.encode("utf-8"))
clients[client] = name
while True:
msg = client.recv(BufferSize).decode("utf-8")
if msg != "quit":
Broadcast(msg.encode("utf-8"), name + ": ")
else:
message = ("{} has left the chat.").format(clients[client])
Broadcast(message.encode("utf-8"))
client.send(("Will see you soon..").encode("utf-8"))
del clients[client]
break
def Broadcast(msg, name = ""):
for sockets in clients:
sockets.send(name.encode("utf-8") + msg)
server = socket(family=AF_INET, type=SOCK_STREAM)
try:
server.bind((HOST, PORT))
except OSError:
print("Server Busy")
BufferSize = 1024
server.listen(5)
print("Waiting for Connections... ")
AcceptThread = Thread(target=Connections)
AcceptThread.start()
AcceptThread.join()
server.close()
这是我的客户端.py
from socket import AF_INET, SOCK_STREAM, socket
from threading import Thread
HOST = input("Enter Host IP: ")
PORT = eval(input("Enter Port No: "))
BufferSize = 1024
def Recieve():
while True:
try:
msg = client.recv(BufferSize).decode("utf-8")
print(msg)
except OSError:
break
def Send():
while True:
msg = input()
if msg == "quit":
client.send(msg.encode("utf-8"))
client.close()
break
else:
client.send(msg.encode("utf-8"))
client = socket(family=AF_INET, type=SOCK_STREAM)
client.connect((HOST, PORT))
RecieveThread = Thread(target=Recieve).start()
SendThread = Thread(target=Send).start()
请告诉我哪里出错了。我在这里经历了这个答案。但我不知道在我的代码中在哪里纠正这个问题。提前致谢。
解决方案
推荐阅读
- c++ - LinkedListInit,LinkedListCreateH方法中的“L->next=NULL”有什么问题吗?
- kentico-kontent - 有没有办法使用 Kentico-Cloud 中的 ContentDelivery API 获取项目中定义的语言列表?
- google-cloud-build - 如何从 Google Cloud build github App 显示有关 github 检查的其他信息
- ruby-on-rails - Rails:是什么决定了传递的“参数”的名称?
- reactjs - 未处理的拒绝(TypeError):比较 id 时无法读取未定义的属性“”
- version - 如何从 CorDapp 代码访问 versionInfo?
- javascript - 如何立即使用在 WebStorm 中从 html 生成的 TypeScript?
- php - 在php中使用相同的数组键对多维数组进行排序
- javascript - 对键值的双数据绑定对象,用于下拉列表
- java - 为什么我们在资源和授权服务器中需要完全相同的配置