客户端和服务器仅接收和发送一次

时间:2020-01-28 05:18:14

标签: python sockets

我写了服务器和客户端,看来它们只通讯一次。我尝试了几种方法来解决它,但是没有运气。我试图将'\ n'放在字符串的末尾,但没有任何变化。有人可以帮忙吗? 服务器代码:

    # server
    import socket

    SERVER_IP = '0.0.0.0'
    DEST_PORT = 1731

    server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    server_socket.bind((SERVER_IP,DEST_PORT))
    server_socket.listen(1)

    client_socket,address=server_socket.accept()

    for i in range(2):
        data = client_socket.recv(512).decode()
        client_socket.sendall(("hello"+data+'\n').encode())
        data1 = client_socket.recv(512).decode()
        print(data1)

    client_socket.close()
    server_socket.close()



    #client
    import socket

    HOST_IP = '127.0.0.1'
    DEST_PORT = 1731


    my_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    my_socket.connect((HOST_IP,DEST_PORT))
    user_msg = input("Enter massage:")
    for i in range(2):
        my_socket.sendall(user_msg.encode())
        data = my_socket.recv(512).decode()
        print(data)
        my_socket.sendall("hiii\n".encode())

    my_socket.close()

1 个答案:

答案 0 :(得分:0)

为我工作,但是由于您在客户端循环之外获取了输入,因此两个迭代是瞬时的:

  • 客户端发送输入
  • 服务器回复输入
  • 客户端发送其最后一条消息并四处循环
  • 服务器接收并打印消息并循环遍历
  • 客户端重新发送输入
  • 客户回复时再次输入相同的输入
  • 客户端发送最后一条消息并退出
  • 服务器打印最后一条消息并退出

当打印更清晰的消息时,这很清楚(前缀是打印的哪一侧):

Enter massage:test message <- client sends this, server replies with "ping <message>"
[client] ping test message <- client prints response, sends final message and loops around
[server] pong <- server prints second message it got, loops around
[client] ping test message <- client prints response it got from server bouncing message again
[client] stop <- client exits
[server] pong <- server gets second message of loop
[server] stop <- and exits