如何使用Python在一个函数中重复TCP/IP通信?

如何使用Python在一个函数中重复TCP/IP通信?,python,sockets,networking,tcp,Python,Sockets,Networking,Tcp,我用Python编写了以下TCP/IP代码 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): soc

我用Python编写了以下TCP/IP代码

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()
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()
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()
server.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()
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()
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()
这些代码运行良好

但我不想重复执行send_msg()

实际上,我想在send_msg()函数中编写一个while语句并重复传输,如下面的代码所示

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))
        sock.send(b'hello world')
    return

send_msg()
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()
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

如何在一个函数中重复发送?

我可以通过如下修改server.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
谢谢你,Ace shinigami

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):
                while True:
                    msg = conn.recv(buf_size)
                    print(msg)
    return

run_server()

您是否更改了服务器代码?现在,您的服务器反复接受连接,接收消息,然后关闭连接,但新客户端反复发送消息。如果希望服务器继续接受消息,则必须编写一个while循环,循环
conn.recv(buf_size)
。否则,如果要为每条消息重新建立连接,请使用
with
语句将客户端中的while循环移动到外部谢谢!您的评论使我的代码正常工作。