我正在尝试学习Socket编码,我写了一小段Process-to-Process通信。 这是Servercode:
import socket
s = socket.socket()
host = socket.gethostname()
port = 17752
s.bind((host, port))
s.listen(5)
while True:
(client, address) = s.accept()
print(address, 'just connected!')
message = input("Would you like to close the connection? (y/n)")
if message == 'y':
message = "False"
client.send(message.encode(encoding="utf_8"))
client.close()
break
elif message == 'n':
print("sending message...")
testing = "Do you want to close the connection?"
client.send(testing.encode(encoding='utf_8'))
print("sent!")
客户代码:
import socket
client = socket.socket()
host = socket.gethostname()
port = 17752
client.connect((host, port))
while True:
print("awaiting closing message...")
closing = client.recv(1024)
closing = closing.decode(encoding='utf_8')
print("Closing message recieved and decoded")
if closing == 'False':
print("message is false, breaking loop")
break
else:
print("Awaiting message...")
recieved = client.recv(1024)
recieved = recieved.decode(encoding='utf_8')
print("Message recieved and decoded")
print(recieved)
sd = input('(y/n) >')
if sd == 'y':
print("Closing connection")
client.close()
break
print("Sorry, the server closed the connection!")
它的意图是什么?
基本上是学习和练习套接字编码。 它应该是一个程序,它将数据从服务器发送到客户端,并且能够通过回答问题的y或n来终止连接。 如果双方都继续回答,程序就会继续运行。 只要有人回答,它就会终止服务器或客户端。
现在,我不知道那里有什么问题。 如果我为“服务器”问题键入“y”,“您要关闭此连接吗?”它一切正常。
如果我键入'n',服务器会执行它应该执行的操作,但客户端不会收到任何内容。大多数'print'语句都用于调试。多数民众赞成我怎么知道服务器工作正常。
那里有什么问题?我试图找到它,我做不到。
我是一个新的python和新的socket编码。所以请保持轻松。 感谢。
(我使用Win10 cmd下的批处理脚本运行它) (由于它是Process-to-Process,它可能不被称为“服务器”?)
答案 0 :(得分:0)
在您的代码中,每个system.time(DT %>%
summarise_each(funs(sum(.==first(.)))))
# user system elapsed
# 0.38 0.16 0.53
都应在服务器端具有匹配的connect
您的客户accept
每次会话一次,
但是每个消息之后的服务器connect
,所以在调用第二个accept
时,服务器已经尝试接受另一个客户端。
显然你的服务器应该只处理一个客户端,
所以你可以将调用移到recv
循环:
accept