【问题标题】:Problem with input, while using tcp sockets使用 tcp 套接字时出现输入问题
【发布时间】:2020-03-29 09:49:25
【问题描述】:

我有一个 tcp 服务器和两个连接的客户端。这是一个井字游戏,所以客户一个接一个地移动。服务器向客户端发送一个数据包,表示它允许输入,而第二个客户端只是等待。问题是当第二个等待它的客户端可以写一些东西时,它直到轮到它才会发送到服务器。 server outputsecond client所以问题是当轮到第二个客户端时,他在它之前写了一些东西,它被发送到服务器。如何在“轮到你,输入(行列)”之前“清除”所有内容

"Your turn, enter (row col)" - 表示服务器发送数据包,等待用户输入

“一切正常” - 表示将用户输入传递到服务器

服务器:

            if is_x:
                players[0].send(b'\0x01')
                client_move = sock_manipulation.receive_move(players[0])
                if client_move:
                    players[0].send('Everything ok'.encode())
                    print(f'Client move: {client_move}')
                else:
                    print('Nothing received!')
                is_x = False
            else:
                players[1].send(b'\0x01')
                client_move = sock_manipulation.receive_move(players[1])
                if client_move:
                    players[1].send('Everything ok'.encode())
                    print(f'Client move: {client_move}')
                else:
                    print('Nothing received!')
                is_x = True

客户:

    while 1:
    command = sock.recv(2048)
    if command == b'\0x01':
        move = pickle.dumps(input('Your turn, enter (row col): ').split())
        sock.send(move)
        accept = sock.recv(2048)
        print(accept.decode())

【问题讨论】:

  • 您要清除屏幕上的输出吗?
  • 不,不是输出。第二个客户在“轮到你了……”之前写了一些东西,我想忽略它,并征求意见。

标签: python sockets


【解决方案1】:

两种可能:

  • 轮到他时关闭客户端连接
    • 客户端应尝试重新连接,但服务器仅在轮到它时才会接受
  • 服务器应始终从客户端接收,但如果不是轮到它,recv 数据将被忽略

我个人会使用第二个选项。

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 2015-07-17
    • 2015-02-18
    相关资源
    最近更新 更多