python - 多个客户端的套接字编程

标签 python sockets

我正在尝试使用多个客户端的套接字为聊天服务器编写代码。但它仅适用于单个客户。为什么它不适用于多个客户端?

我必须使用 Beaglebone Black 执行此程序。我的服务器程序将在 beaglebone 上运行,普通客户端在 gcc 或终端上运行。所以我不能使用多线程。

    #SERVER                                                                      
import socket
import sys

s=socket.socket()
s.bind(("127.0.0.1",9998))
s.listen(10)

while True:
    sc,address = s.accept()
    print address
    while True:
            msg = sc.recv(1024)
        if not msg:break


        print "Client says:",msg
        reply = raw_input("enter the msg::")
        sc.send(reply)  
    sc.close()
s.close()

#CLIENT
import socket
import sys
s= socket.socket()
s.connect(("127.0.0.1",9998))

while (1):
    msg = raw_input("enter the msg")
    s.send(msg)
    reply = s.recv(1024)
    print "Server says::",reply
s.close()

最佳答案

使用事件循环。

像asyncio一样集成在python中:Echo server example

或者使用提供事件循环的外部库,如 libuv: Echo server example .

注意:您的代码无法同时为多个客户端工作,因为您在接收操作中被阻止,并且您没有处理新的接受操作。

关于python - 多个客户端的套接字编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29538063/

相关文章:

python - 在 sklearn NearestNeighbor 中使用每个邻居一次

python - Pandas to_sql 中行的排序

javascript - 重新连接后未触发 socket.io 'connect' 或 'reconnect' 事件

c++ - 如何从子进程向所有进程发送信号?

c++ - boost asio 打开更多的一个套接字

javascript - ajax 将数据从 javascript 发送到 python

python - 如何从 C++ 创建 c_void_p PyObject,将其传递给 Python 并将其检索回 C++

python - 使用 Python 的 GCP 数据流。 "AttributeError: Can' t 获取模块 '_JsonSink' 上的属性 'dataflow_worker.start'

C#:如何在 Socket.BeginReceive 回调之前终止套接字?

c - 如何知道tcp session 结束?