如何在python中处理UDP套接字客户端

士兵队长

在TCP套接字中,您绑定然后通过s.accept()接受连接,但是在UDP套接字中,您仅绑定服务器,任何人都可以连接(如果我错了,请纠正我),因此如何控制客户端,例如如果5个客户端连接到服务器,则关闭服务器或如果有人连接到服务器,向他发送一条消息,说欢迎来到服务器。谢谢回答。

毒解毒剂

根据定义,UDP没有“会话”的概念,因此它不知道当前正在处理多少个会话。

您将需要在代码中实现某种会话管理,以决定客户端何时处于活动状态或不处于活动状态,并对此采取措施。

下面是一个示例代码部分,该部分应最多允许五个客户端并使它们在三十秒后过期。

bind_ip = '192.168.0.1' ## The IP address to bind to, 0.0.0.0 for all
bind_port = 55555 ## The port to bind to
timeout = 30 ## How long before forgetting a client (seconds)
maximum = 5 ## Maximum number of clients

###
import socket
import time

## Create the socket as an internet (INET) and UDP (DGRAM) socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

## Bind to the server address and port
sock.bind((bind_ip, bind_port))

## Make a dict to store when each client contacted us last
clients = dict()

## Now loop forever
while True:
    ## Get the data and the address
    data, address = sock.recvfrom(1024)

    ## Check timeout of all of the clients
    for addr in clients.keys():
        ## See if the timeout has passed
        if clients[addr] < (time.time() - timeout):
            ## Expire the client
            print('Nothing from ' + addr + ' for a while. Kicking them off.')           
            clients.pop(addr)

    ## Check if there are too many clients and if we know this client
    if len(clients.keys()) > maximum and address not in clients.keys():
        print('There are too many clients connected!')
        continue    

    ## Update the last contact time
    clients[address] = time.time()

    ## Do something with the data
    print('Received from ' + str(address) + ': ' + str(data))           

这绝不是最有效的方法,仅作为示例。

相关阅读内容:https : //en.wikibooks.org/wiki/Communication_Networks/TCP_and_UDP_Protocols/UDP

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在python中运行多线程以进行多客户端套接字编程?

来自分类Dev

如何在python中创建一个持续运行的套接字客户端

来自分类Dev

在Go中写入客户端UDP套接字

来自分类Dev

Python中的UDP客户端/服务器套接字

来自分类Dev

如何在Android中通过套接字建立客户端到客户端语音呼叫

来自分类Dev

如何在Python客户端和C ++服务器上使用套接字

来自分类Dev

如何在C / C ++中关闭特定客户端的套接字?

来自分类Dev

套接字客户端如何setSoTimeout

来自分类Dev

Python tcp套接字客户端

来自分类Dev

套接字中的Java客户端

来自分类Dev

如何让客户端套接字继续在python中侦听服务器?

来自分类Dev

如何解决python中TCP套接字客户端部分的阻塞问题?

来自分类Dev

UDP客户端异步不会关闭套接字

来自分类Dev

多个 UDP 套接字和多个客户端

来自分类Dev

UDP 和套接字响应客户端

来自分类Dev

如何使用客户端套接字作为服务器套接字python

来自分类Dev

如何使用相同的本地端口打开两个udp客户端套接字

来自分类Dev

Python 2.7.8:套接字-TCP套接字中的客户端服务器数据丢失

来自分类Dev

使用C中的UDP套接字将结构从客户端传递到服务器

来自分类Dev

Java处理多个客户端套接字

来自分类Dev

创建不监听套接字的UDP客户端套接字

来自分类Dev

如何在Python中制作一个能记住客户端的简单多线程套接字服务器

来自分类Dev

如何在C套接字(sys / socket.h)中获得客户端的地址和端口?

来自分类Dev

在python中关闭服务器后,如何让客户端套接字继续监听服务器?

来自分类Dev

如何在没有套接字的Android中使用TCP客户端?

来自分类Dev

如何通过Web客户端访问TCP套接字

来自分类Dev

Sensu:客户端套接字输入(如何打印事件)

来自分类Dev

Java套接字-如何模拟多个客户端

来自分类Dev

如何使用json数据从客户端发出套接字?

Related 相关文章

  1. 1

    如何在python中运行多线程以进行多客户端套接字编程?

  2. 2

    如何在python中创建一个持续运行的套接字客户端

  3. 3

    在Go中写入客户端UDP套接字

  4. 4

    Python中的UDP客户端/服务器套接字

  5. 5

    如何在Android中通过套接字建立客户端到客户端语音呼叫

  6. 6

    如何在Python客户端和C ++服务器上使用套接字

  7. 7

    如何在C / C ++中关闭特定客户端的套接字?

  8. 8

    套接字客户端如何setSoTimeout

  9. 9

    Python tcp套接字客户端

  10. 10

    套接字中的Java客户端

  11. 11

    如何让客户端套接字继续在python中侦听服务器?

  12. 12

    如何解决python中TCP套接字客户端部分的阻塞问题?

  13. 13

    UDP客户端异步不会关闭套接字

  14. 14

    多个 UDP 套接字和多个客户端

  15. 15

    UDP 和套接字响应客户端

  16. 16

    如何使用客户端套接字作为服务器套接字python

  17. 17

    如何使用相同的本地端口打开两个udp客户端套接字

  18. 18

    Python 2.7.8:套接字-TCP套接字中的客户端服务器数据丢失

  19. 19

    使用C中的UDP套接字将结构从客户端传递到服务器

  20. 20

    Java处理多个客户端套接字

  21. 21

    创建不监听套接字的UDP客户端套接字

  22. 22

    如何在Python中制作一个能记住客户端的简单多线程套接字服务器

  23. 23

    如何在C套接字(sys / socket.h)中获得客户端的地址和端口?

  24. 24

    在python中关闭服务器后,如何让客户端套接字继续监听服务器?

  25. 25

    如何在没有套接字的Android中使用TCP客户端?

  26. 26

    如何通过Web客户端访问TCP套接字

  27. 27

    Sensu:客户端套接字输入(如何打印事件)

  28. 28

    Java套接字-如何模拟多个客户端

  29. 29

    如何使用json数据从客户端发出套接字?

热门标签

归档