Я делаю сценарии с использованием сокета 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
послезакрытие сокета и может ли это повлиять на мою программу?