以下python套接字服务器代码有什么问题?

问题描述 投票:0回答:1

为什么在关闭第一个连接后,以下服务器代码似乎也无法接受与客户端的新连接?

def bindPort(port):
    global return_response
    serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        serverSocket.bind(('', port))
    except:
        print("Cannot bind to port. Error: " + str(sys.exc_info))

    serverSocket.listen(2)
    print("The server is ready to receive")
    count = 0
    while True:
        connectionSocket, addr = serverSocket.accept()
        count += 1
        print("Accepted {} connections so far.".format(count))
        print('Connection established from {}'.format(addr))
        while True:
            sentence = connectionSocket.recv(1024)
            if not sentence:
                print("Empty")
                break
            print(sentence)
            #parseIncomingRequest(sentence.decode())
            print(return_response)
            connectionSocket.send(return_response.encode())
            return_response = ''
        print("Closing loop")
        connectionSocket.close() 
python sockets server serversocket
1个回答
-1
投票

我很抱歉没有正确阅读问题

1)在使用前声明返回响应变量

2)如果要接受其他连接,请跳出第二个while循环。在问题中,您说关闭套接字后没有任何连接被接受,但是要关闭套接字,您必须跳出第二个while循环。或者我认为您应该删除第二个循环。

3)如果您想继续监听套接字并仍然能够接收其他连接,请使用线程模块

def bindPort(port):
  global return_response
  serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  try:
    serverSocket.bind(('', port))
  except:
    print("Cannot bind to port. Error: " + str(sys.exc_info))

  serverSocket.listen(2)
  print("The server is ready to receive")
  count = 0
  while True:
    connectionSocket, addr = serverSocket.accept()
    count += 1
    print("Accepted {} connections so far.".format(count))
    print('Connection established from {}'.format(addr))
    sentence = connectionSocket.recv(1024)    
    if not sentence:
          print("Empty")
          break
    print(sentence)
     #parseIncomingRequest(sentence.decode())
    return_response = ''
    print(return_response)
    connectionSocket.send(return_response.encode())
    connectionSocket.shutdown(socket.SHUT_RDWR)
    connectionSocket.close() 

4),或者如果您想保留循环以进一步修改

import socket

def bindPort(port):
  global return_response
  serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  try:
    serverSocket.bind(('', port))
  except:
    print("Cannot bind to port. Error: " + str(sys.exc_info))

  serverSocket.listen(2)
  print("The server is ready to receive")
  count = 0
  while True:
    connectionSocket, addr = serverSocket.accept()
    count += 1
    print("Accepted {} connections so far.".format(count))
    print('Connection established from {}'.format(addr))
    while True:

        sentence = connectionSocket.recv(1024)
        if not sentence:
            print("Empty")
            break
        print(sentence)
        #parseIncomingRequest(sentence.decode())
        return_response = 'a'
        print(return_response)
        connectionSocket.send(return_response.encode())
        break

    print("Closing loop")
    connectionSocket.shutdown(socket.SHUT_RDWR)
    connectionSocket.close()
© www.soinside.com 2019 - 2024. All rights reserved.