如何使用Python在一个函数中重复TCP/IP通信?
我用Python编写了以下TCP/IP代码 client.py如何使用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
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循环移动到外部谢谢!您的评论使我的代码正常工作。