![](/img/trans.png)
[英]Send message from Java client to Python server using sockets and vice versa
[英]Python — Client Waiting for Server Input (and vice versa)
我是Python的新手,也是Python套接字和服務器的新手,所以請多多包涵! 基本上,我試圖在客戶端和服務器之間建立一個hang子手游戲來玩游戲。 我知道這個系統有很多缺點(包括大多數代碼在客戶端而不是服務器端,我正在努力解決,但無論如何...)
本質上,我的客戶啟動游戲,並從服務器獲取關於子手游戲“單詞”的輸入。 游戲結束后,它將再次播放init方法以重新啟動游戲。 我希望它再次等待來自服務器的輸入,因此它不會從第一次播放相同的輸入。 你有什么建議嗎?
這是我的服務器代碼:
#!/usr/bin/env python
"""
Created on Tue Jul 26 09:32:18 2016
@author: Kevin Levine / Sam Chan
"""
# Echo server program
import socket
import time
HOST = '10.232.2.162' # Symbolic name meaning all available interfaces
PORT = 5007 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
def sendClient(message):
conn.send(message)
data = "1"
while True: # Whole game
if data == "1":
while True:
print "Enter word to be guessed."
message = raw_input("> ")
if message.isalpha():
sendClient(message)
else:
"Your word included some non-alphabetical characters."
data = conn.recv(1024)
if data == "2":
break
# data = s.recv(1024)
# clientData = conn.recv(1024)
# print "Received", clientData, "from Client"
這是我的客戶代碼:
#!/usr/bin/python
"""
Created on Tue Jul 26 09:12:01 2016
@author: Kevin Levine / Sam Chan
"""
# Echo client program
import socket
import time
HOST = '10.232.5.58' # The remote host
PORT = 5007 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
def sendServer(message):
s.send(message)
class Hangman():
def __init__(self):
print "Welcome to 'Hangman', are you ready to play? "
print "(1) Yup!\n(2) Nah"
user_choice_1 = raw_input("> ")
serverData = s.recv(1024)
global the_word
the_word = serverData
if user_choice_1 == '1':
print "Loading..."
for t in range(3, -1, -1):
print t, "..."
time.sleep(1)
self.start_game()
elif user_choice_1 == '2':
print "Bye bye now..."
exit()
else:
print "I didn't understand you..."
self.__init__()
def start_game(self):
print "Six fails, no more, no less. Try to guess the word by guessing letters!"
self.core_game()
def core_game(self):
guesses = 0
letters_used = ""
progress = []
for num in range(0, len(the_word)):
progress.append("?")
while guesses < 6:
if "".join(progress) == the_word:
print "Congrats! You guessed the word '%s'!" % the_word
print "========================================"
time.sleep(3)
self.__init__()
guessraw = raw_input("> ")
guess = guessraw.lower()
if (guess in the_word) and (guess not in letters_used):
print "You guessed correctly!"
letters_used += "," + guess
self.hangman_graphic(guesses)
print "Progress: " + self.progress_updater(guess, the_word, progress)
print "Letter used: " + letters_used
elif (guess not in "abcdefghijklmnopqrstuvwxyz"):
print "Only guess letters!"
elif (guess not in the_word) and (guess not in letters_used):
guesses += 1
print "That guess was wrong."
letters_used += "," + guess
self.hangman_graphic(guesses)
print "Progress: " + "".join(progress)
print "Letter used: " + letters_used
else:
print "Only guess unique letters!"
def hangman_graphic(self, guesses):
if guesses == 0:
print "________ "
print "| | "
print "| "
print "| "
print "| "
print "| "
elif guesses == 1:
print "________ "
print "| | "
print "| 0 "
print "| "
print "| "
print "| "
elif guesses == 2:
print "________ "
print "| | "
print "| 0 "
print "| / "
print "| "
print "| "
elif guesses == 3:
print "________ "
print "| | "
print "| 0 "
print "| /| "
print "| "
print "| "
elif guesses == 4:
print "________ "
print "| | "
print "| 0 "
print "| /|\ "
print "| "
print "| "
elif guesses == 5:
print "________ "
print "| | "
print "| 0 "
print "| /|\ "
print "| / "
print "| "
else:
print "________ "
print "| | "
print "| 0 "
print "| /|\ "
print "| / \ "
print "| "
print "GAME OVER, you lost! :("
print "The word was ", the_word
print "========================================"
endmessage = 1
sendServer(endmessage)
self.__init__()
def progress_updater(self, guess, the_word, progress):
i = 0
while i < len(the_word):
if guess == the_word[i]:
progress[i] = guess
i += 1
else:
i += 1
return "".join(progress)
game = Hangman()
也許您可以制作一個循環,而不是僅創建一個Hangman實例,如下所示:
while True:
game = Hangman()
可以使用退出條件,而不是無限循環。 例如,在您的課堂上,您可能有一個布爾變量來指示游戲是否結束(例如,假設該變量的名稱為end)。
game = Hangman()
while True:
if not game.end:
continue
game = Hangman()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.