为什么我的客户接受2个连接?

时间:2014-12-19 19:12:07

标签: python sockets

我在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

1 个答案:

答案 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)

并且您的服务器将停止允许第二个连接等待接受。