我正在尝试用python创建一个p2p聊天。这个想法是让客户端在出现故障时能够成为服务器。这是为了学习目的,所以我只是在我的笔记本电脑上本地做这个。
但到目前为止,我正在努力实现客户端和服务器之间的通信。
我为服务器打开了一个终端窗口。2个客户端终端窗口。
如果我连接两个客户端,它们都可以向服务器发送消息,服务器将消息广播给所有客户端。但在第二个客户端发送一条消息后,只有一个客户端可以发送消息,但服务器会打印出两个客户端的端口。
输出示例:https://i.imgur.com/nJrycos.png
我疯狂地谷歌了一下。我尝试将套接字创建放在while循环中(参见下面的代码)。
class Server:
connections = []
def __init__(self):
print("server created")
# I have tried putting this part in the while loop below
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
hostname = socket.gethostname()
host = socket.gethostbyname(hostname)
port = 5001
sock.bind((host, port))
print("Hosting server on " + host + ":" + str(port) + " hostname: " + hostname)
sock.listen(1) # I have tried changing the value from 1 to 2, 5, 10 etc but no difference
while True:
connection, client_address = sock.accept()
print(str(client_address) + " connected!")
# create new thread
listener_thread = Thread(target=self.server_listener, args=(connection, client_address))
listener_thread.daemon = True
listener_thread.start()
self.connections.append(connection)
def server_listener(self, connection, client_address):
while True:
chunk = connection.recv(1024)
if not chunk:
print(str(client_address) + " disconnected")
break
elif chunk[0:3] == b'msg':
# Send out message to other clients connected
for connection in self.connections:
connection.send(chunk[3:].decode())
print(str(client_address) + ':' + chunk[3:])
我的客户机类基本上是相同的,但使用connect而不是bind。客户端还有一个线程方法,用于侦听服务器消息。
我没有收到任何错误消息,所以我甚至不知道线程或网络部分是否有任何问题。
我希望服务器能够有多个线程,能够连接多个客户端,并且能够进行通信。
您正在覆盖中的连接
def server_listener(self, connection, client_address):
...
elif chunk[0:3] == b'msg':
# Send out message to other clients connected
for connection in self.connections: << HERE
connection.send(chunk[3:].decode())
更改self中的连接。连接到自身中的c。连接并尝试。
如何处理多个客户端连接到一个服务器?我有这个logserver.java 和一个嵌入式applet,其中包含如下所示的部分代码,例如 现在的问题是,如果我在服务器上运行“Java日志服务器”,它将打开应用程序并等待输入流,如果我打开我的站点,它将开始流日志。但如果我使用其他计算机/网络再打开一个站点,第二个站点不会记录流。似乎是因为第一个仍然绑定到端口5000。 我该怎么处理?socket实际上是
问题内容: 如何处理多个客户端以连接到一台服务器?我有这个LogServer.java 和一个嵌入式小程序,其中包含部分代码,例如 现在的问题是,如果我在服务器上运行“ java LogServer”,它将打开应用程序并等待输入流,如果打开站点,它将开始流式传输日志。但是,如果我使用其他计算机/网络再打开一个,则第二个站点不会记录该流。似乎是因为第一个仍绑定到端口5000。 我该如何处理?套接字实
服务器 ServerThreadHandler:
真的需要你帮忙。 我的项目是通过电缆连接两台PC机,并使用tcp套接字将客户端文本框形式的字符串发送到服务器。问题是ATI只能发送一个字符串,然后连接就会关闭。 注意:某个端口上的连接将在表单加载中建立并成功。
Java: 在C#中-它停止在“receiver=listener.accept();”在java(android)中-它停止于“sender_socket=new Socket(serverAddr,SERVERPORT);”这应该是java套接字函数的问题--需要另一个函数连接到C#-server。
当我尝试使用套接字将物理设备连接到服务器时,我遇到了一个问题。在服务器端,它似乎不接受任何连接,而在客户端,套接字超时。你知道为什么会这样吗? 我在下面提供我的代码 服务器代码: 客户端: 11-16 23:32:11.016:W/系统。错误(24213):java.net。ConnectException:无法连接到/192.168.1.116(端口9090):连接失败:ETIMEDOUT(连接