Я написал следующий код TCP / IP в Python.
client.py
import socket
from contextlib import closing
def send_msg():
host = '127.0.0.1'
port = 4000
buf_size = 4096
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
with closing(sock):
sock.connect((host, port))
sock.send(b'hello world')
return
send_msg()
server.py
import socket
from contextlib import closing
def run_server():
host = '127.0.0.1'
port = 4000
backlog = 10
buf_size = 4096
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
with closing(sock):
sock.bind((host, port))
sock.listen(backlog)
while True:
conn, address = sock.accept()
with closing(conn):
msg = conn.recv(buf_size)
print(msg)
return
run_server()
Эти коды работали нормально.
Но я не хочу выполнять send_msg () повторно.
На самом деле я хочу написать оператор while в функции send_msg () и повторить передачу, как показано ниже:
clientError.py
import socket
from contextlib import closing
def send_msg():
host = '127.0.0.1'
port = 4000
buf_size = 4096
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
with closing(sock):
sock.connect((host, port))
while True:
sock.send(b'hello world')
return
send_msg()
Однако clientError.py выдает ошибку.
Подробности ошибки следующие.
"clientError.py", line 13, in send_msg
sock.send(b'hello world')
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host
Как я могу повторить отправку в одной функции?