我正在用python学习套接字编程,对不起,因为英语是我的第二语言。 我要制作一个程序,第一个客户端向服务器发送消息,然后服务器回复客户端。 这是我的代码:
server.py:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 1234))
s.listen(5)
full_msg = ""
while True:
con, add = s.accept()
print(f"connection is established via {add}")
while True:
data = con.recv(16)
if not data:
break
full_msg += data.decode()
print(full_msg)
full_msg = ""
con.send("Thank you".encode())
con.close()
client.py:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 1234))
s.send("Hello".encode())
full_msg = ""
while True:
data = s.recv(16)
if not data:
break
full_msg += data.decode()
print(full_msg)
我希望在服务器脚本输出“ Hello”和客户端脚本“ Thank you”中都没有输出。它们在接收数据时都不会停止。为什么?
更新: 我使用了关机方法,效果更好。我更改代码以在客户端和服务器之间建立连接。在无限循环中,我们要求客户端提供消息,然后将其发送到服务器,直到客户端输入“ q”。现在,客户端可以发送消息并从服务器接收消息,但是第二次客户端要发送消息时,客户端将收到错误消息“ BrokenPipeError:[WinError 10058]由于套接字已被禁止发送或接收数据通过先前的关闭调用朝该方向关闭”。 我该如何解决?
server.py:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 1234))
s.listen(5)
full_msg = ""
while True:
con, add = s.accept()
print(f"connection is established via {add}")
while True:
data = con.recv(16)
if not data:
break
full_msg += data.decode()
print(full_msg)
full_msg = ""
con.send("Thank you".encode())
con.shutdown(1)
client.py:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 1234))
while True:
msg = input("What do you want to send -> ")
if msg == "q":
break
s.send(msg.encode())
s.shutdown(1)
full_msg = ""
while True:
data = s.recv(16)
if not data:
break
full_msg += data.decode()
print(full_msg)