如何让服务器接受来自多个端口的连接?

前端之家收集整理的这篇文章主要介绍了如何让服务器接受来自多个端口的连接?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

如何创建一个简单的服务器(简单如接受连接并打印到终端接收的任何内容)接受来自多个端口或端口范围的连接?

我是否必须使用多个线程,每个绑定调用一个.还是有其他解决方案吗?

简单的服务器看起来像这样.

  1. def server():
  2. import sys,os,socket
  3. port = 11116
  4. host = ''
  5. backlog = 5 # Number of clients on wait.
  6. buf_size = 1024
  7. try:
  8. listening_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  9. listening_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
  10. listening_socket.bind((host,port))
  11. listening_socket.listen(backlog)
  12. except socket.error,(value,message):
  13. if listening_socket:
  14. listening_socket.close()
  15. print 'Could not open socket: ' + message
  16. sys.exit(1)
  17. while True:
  18. accepted_socket,adress = listening_socket.accept()
  19. data = accepted_socket.recv(buf_size)
  20. if data:
  21. accepted_socket.send('Hello,and goodbye.')
  22. accepted_socket.close()
  23. server()

编辑:
这是一个如何完成它的例子.感谢大家.

  1. import socket,select
  2. def server():
  3. import sys,socket
  4. port_wan = 11111
  5. port_mob = 11112
  6. port_sat = 11113
  7. sock_lst = []
  8. host = ''
  9. backlog = 5 # Number of clients on wait.
  10. buf_size = 1024
  11. try:
  12. for item in port_wan,port_mob,port_sat:
  13. sock_lst.append(socket.socket(socket.AF_INET,socket.SOCK_STREAM))
  14. sock_lst[-1].setsockopt(socket.SOL_SOCKET,1)
  15. sock_lst[-1].bind((host,item))
  16. sock_lst[-1].listen(backlog)
  17. except socket.error,message):
  18. if sock_lst[-1]:
  19. sock_lst[-1].close()
  20. sock_lst = sock_lst[:-1]
  21. print 'Could not open socket: ' + message
  22. sys.exit(1)
  23. while True:
  24. read,write,error = select.select(sock_lst,[],[])
  25. for r in read:
  26. for item in sock_lst:
  27. if r == item:
  28. accepted_socket,adress = item.accept()
  29. print 'We have a connection with ',adress
  30. data = accepted_socket.recv(buf_size)
  31. if data:
  32. print data
  33. accepted_socket.send('Hello,and goodbye.')
  34. accepted_socket.close()
  35. server()
最佳答案
我不是Python人,但你感兴趣的功能是“选择”.这将允许您观察多个套接字,并在其中任何一个发生活动时发生故障.

这是一个python example that uses select.

猜你在找的Python相关文章