Как правильно закрыть python-сокет в Windows? - PullRequest
0 голосов
/ 12 декабря 2018

Я делаю сценарии с использованием сокета Python.Я хочу знать правильный способ закрыть сокет в Python.У меня есть два сценария, и оба действуют как сервер и клиент и работают в цикле.Мой скрипт приведен ниже

script1.py

import socket,time
port = 7785

def Socket_server():
    global data
    host = socket.gethostbyname(socket.gethostname())
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server.bind((host,port))
    server.listen(1)
    print("Listening")
    c,addr = server.accept()
    print("Got Connection from ",addr)
    data = c.recv(1024)
    print("Received Pool Id : %s" % data)
    time.sleep(0.5)
    server.shutdown(socket.SHUT_RDWR)
    server.close()

def Socket_client():
    master_ip = '127.0.0.1'
    client  = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    client.connect((master_ip,port))
    print("Connected to master")
    some_id = "send"
    client.send(some_id)
    print("sent data to master")
    time.sleep(0.2)
    client.shutdown(socket.SHUT_RDWR)
    client.close()

Socket_server()
if data is not None:
    # Do some work here
    pass
Socket_client()

script2.py

import socket,time
port = 7785

def Socket_client():
    master_ip = '127.0.0.0'
    client  = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    client.connect((master_ip,port))
    print("Connected to master")
    some_id = "send"
    client.send(some_id)
    print("sent data to master")
    time.sleep(0.2)
    client.shutdown(socket.SHUT_RDWR)
    client.close()

def Socket_server():
    global data
    host = socket.gethostbyname(socket.gethostname())
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server.bind((host,port))
    server.listen(1)
    print("Listening")
    c,addr = server.accept()
    print("Got Connection from ",addr)
    data = c.recv(1024)
    print("Received Pool Id : %s" % data)
    time.sleep(0.5)
    server.shutdown(socket.SHUT_RDWR)
    server.close()

Socket_client()

Socket_server() # wait for the script

Я не являюсьвозникают большие проблемы, но когда я использую команду netstat -ano | findstr :7785 для просмотра статуса порта, я получаю длинный список сокетов прослушивания, приведенный ниже

C:\Users\name>netstat -ano | findstr :7785
TCP    182.16.1.206:7785      0.0.0.0:0              LISTENING       4244
TCP    182.16.1.206:7785      0.0.0.0:0              LISTENING       4244
TCP    182.16.1.206:7785      0.0.0.0:0              LISTENING       4244
TCP    182.16.1.206:7785      0.0.0.0:0              LISTENING       4244
TCP    182.16.1.206:7785      0.0.0.0:0              LISTENING       4244
TCP    182.16.1.206:7785      0.0.0.0:0              LISTENING       4244
TCP    182.16.1.206:7785      0.0.0.0:0              LISTENING       4244
TCP    182.16.1.206:7785      0.0.0.0:0              LISTENING       4244
TCP    182.16.1.206:7785      0.0.0.0:0              LISTENING       4244
TCP    182.16.1.206:7785      0.0.0.0:0              LISTENING       4244
TCP    182.16.1.206:7785      0.0.0.0:0              LISTENING       4244
TCP    182.16.1.206:7785      0.0.0.0:0              LISTENING       4244
TCP    182.16.1.206:7785      0.0.0.0:0              LISTENING       4244

Может кто-нибудь сказать мне, почему я получаю это число LISTENING послезакрытие сокета и может ли это повлиять на мою программу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...