我在Windows上。我有一个带阻塞套接字的服务器,它应该一次接受一个客户端并允许它对缓冲区进行一些操作。当第一个客户端结束时,它应该服务第二个,依此类推。但它似乎接受两个连接。它只允许第一个客户端进行操作,当第二个客户端断开连接时,它只服务第二个客户端。第三个客户无法连接。
服务器
import socket
import sys
HOST = ''
PORT = 5552
buffer = []
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.bind((HOST, PORT))
except socket.error:
sys.exit()
sock.listen(1)
client, client_addr = sock.accept()
#OPERATIONS
客户端
import socket
import sys
def connect(sock, ip, port):
try:
sock.connect((ip, port))
except socket.error:
sys.exit()
def send(sock, message):
try:
sock.sendall(message)
except socket.error:
return -1
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = 'localhost'
port = 5552
try:
ip = socket.gethostbyname(host)
except socket.gaierror:
sys.exit()
connect(sock, ip, port)
#OPERATIONS
答案 0 :(得分:1)
来自listen.__doc__
:
Enable a server to accept connections. The backlog argument must be at
least 0 (if it is lower, it is set to 0); it specifies the number of
unaccepted connections that the system will allow before refusing new
connections.
您的服务器愿意接受其他客户,因为您已经告知过它。
更改您的积压参数:
sock.listen(1)
为:
sock.listen(0)
并且您的服务器将停止允许第二个连接等待接受。