两次调用.recv(1024)和.send(),没有发生任何事情(Python)

时间:2016-08-20 02:39:30

标签: python sockets process send recv

我正在尝试学习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,它可能不被称为“服务器”?)

1 个答案:

答案 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