【问题标题】:Simple word game using TCP socket使用 TCP 套接字的简单文字游戏
【发布时间】:2021-04-30 17:49:26
【问题描述】:

我是 socket 和 python 编程的新手,我正在尝试在服务器和客户端之间构建一个简单的游戏。基本上,服务器输入一个单词,客户端尝试从服务器单词的前两个字母开始猜测另一个单词。示例:Server:computer|Client:erase|Server:secondary|Client:rye 我有一个循环,它从客户端获取消息并将其发送回它,反之亦然:

#server.py
while True:
   message_sent = input(str("Me : "))
   conn.send(message_sent.encode())
   message_received = conn.recv(1024).decode()
   first = message_sent[:2]
   last = message_received[-2:]
   print(s_name, ":", message_received)
   if first != last:
       message = "wrong word entered "
       conn.send(message.encode())
       print("\n")
       break

和client.py:

#client.py
while True:
   message_received = s.recv(1024).decode()
   print(s_name, ":", message_received)
   message_sent = input(str("Me : "))

   first = message_sent[:2]
   last = message_received[-2:]
   if first != last:
      message = "wrong word typed "
      s.send(message.encode())
      print("\n")
      break
   s.send(message_sent.encode())

当我从客户端向服务器发送一个不正确的单词时,我会得到“输入错误的单词”,但是当我以其他方式发送它时,它只会接受该单词并继续运行。我在这里做错了什么?

【问题讨论】:

  • 如果客户端输入了一个错误的单词,你不希望它被发送到服务器,你希望客户端继续输入单词直到它得到一个正确的单词?
  • 不,我只是想在那里完成游戏并宣布获胜
  • 客户端和服务器都不检查响应是否包含“错误的单词”。他们应该检查是否属实,结束游戏。
  • "但是当我以其他方式发送它时,它只会接受这个词并继续前进。"你是什​​么意思?谁向谁发送什么,当它“继续”时会是什么样子,你能举个例子吗?
  • 当我指的是“错误的词”时,我指的是一个不符合游戏规则的词。我正在尝试在 if 块中执行此操作,检查要发送的消息的前两个字母并检查收到的消息的最后两个字母

标签: python tcp


【解决方案1】:

在服务器中添加:

while True:
   message_sent = input(str("Me : "))
   conn.send(message_sent.encode())
   message_received = conn.recv(1024).decode()
   if message_received == "wrongword":
       print('GAME OVER')
       print('Winner is Server')
       break
   first = message_sent[:2]
   last = message_received[-2:]
   print(s_name, ":", message_received)
   if first != last:
       message = "wrongword"
       conn.send(message.encode())
       print("\n")
       break

在客户端:

while True:
   message_received = s.recv(1024).decode()
   if message_received == "wrongword":
       print('GAME OVER')
       print('Winner is Client')
       break
   print(s_name, ":", message_received)
   message_sent = input(str("Me : "))

   first = message_sent[:2]
   last = message_received[-2:]
   if first != last:
      message = "wrongword"
      s.send(message.encode())
      print("\n")
      break
   s.send(message_sent.encode())

【讨论】:

  • 这里是程序hizliresim.com/61m00k的输出,顺便说一句,第一个词是服务器端的计算机。我认为我自己的块中存在逻辑错误,但我似乎无法理解是怎么回事?
  • 尝试编辑?由于某种原因,服务器中的代码没有进入这个条件:如果 message_received == "wrong word typed"。也许是我遗漏的空间的原因。
  • 我在终端写错字的原因是为了告诉你,当我输入一个不符合游戏规则的单词时,即使一个错误的单词不是“wrongword”,它仍然会继续运行跨度>
  • 我明白,我只是想知道为什么会这样,所以我改变了条件,希望它能解决问题,是吗?它是在黑暗中拍摄的,因为我不明白为什么第一个代码不起作用,我认为这是我留在字符串中的空格字符
  • 在服务器代码中,如果 message_received == "wrongword" 并从 while 循环中中断,它应该进入此条件。它不会那样做,即使它打印出它在 message_received 中得到了字符串“wrongword”。如果您调试服务器代码,请检查为什么不是这种情况。也许一些隐藏的字符没有在打印中显示或其他东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2014-04-12
相关资源
最近更新 更多