Python网络/套接字编程,简单游戏

Python网络/套接字编程,简单游戏,python,Python,我试图做一个简单的游戏,但不知道如何让它工作,并发送超过一个东西在网络上。它第一次起作用,但应该能运行10次。它现在只发送1个随机数,但我希望它在游戏再次进行时发送一个新的随机数,并需要一个新的随机数 服务器 import socket, random sock = socket.socket() host = socket.gethostname() port = 12345 sock.bind((host, port)) sock.listen(5) c,

我试图做一个简单的游戏,但不知道如何让它工作,并发送超过一个东西在网络上。它第一次起作用,但应该能运行10次。它现在只发送1个随机数,但我希望它在游戏再次进行时发送一个新的随机数,并需要一个新的随机数

服务器

import socket, random               

sock = socket.socket()
host = socket.gethostname()
port = 12345
sock.bind((host, port))
sock.listen(5)

c, addr = sock.accept()

cpu = random.choice(range(0, 3))
c.send(cpu)

gameon = c.recv(int(1024))
客户

import socket, random

sock = socket.socket()  # Create a socket object
host = socket.gethostname()  # Get local machine name
port = 12345  # Reserve a port for your service.
sock.connect((host, port))

GAMEON = 'Rock', 'Paper', 'Scissors'
game = 0
iwin = 0
ilose = 0
tie = 0

while game < 10:

    for i in range(0, 3):
        print "%d %s" % (i + 1, GAMEON[i])

    player = int(input ("Choose from 1-3: ")) - 1
    cpu = int(sock.recv(1024))
    print cpu

    print""

    print "%s vs %s" % (GAMEON[player], GAMEON[cpu])
    print ""
    if cpu != player:
      if (player - cpu) % 3 < (cpu - player) % 3:
        print "Player wins\n"
        iwin += 1
      else:
        print "CPU wins\n"
        ilose += 1
    else:
      print "TIE!\n"
      tie += 1 
    game += 1
    sock.send(str(game))
print"Game is done"
print"you win: ", (iwin), "Times"
print"computer wins: ", (ilose), "Times"
print"tie: ", (tie), "Times"
导入套接字,随机
sock=socket.socket()#创建套接字对象
host=socket.gethostname()#获取本地计算机名
端口=12345#为您的服务保留一个端口。
sock.connect((主机、端口))
GAMEON=‘石头’、‘布’、‘剪刀’
游戏=0
iwin=0
ilose=0
平局=0
当游戏<10时:
对于范围(0,3)内的i:
打印“%d%s%”(i+1,游戏机[i])
player=int(输入(“从1-3中选择:”)-1
cpu=int(sock.recv(1024))
打印cpu
打印“”
打印“%s vs%s%”(GAMEON[player],GAMEON[cpu])
打印“”
如果是cpu!=玩家:
如果(播放机-中央处理器)%3<(中央处理器-播放机)%3:
打印“玩家获胜\n”
iwin+=1
其他:
打印“CPU赢\n”
ilose+=1
其他:
打印“领带!\n”
平局+=1
游戏+=1
袜子发送(str(游戏))
打印“游戏结束”
打印“you win:”,(iwin),“Times”
打印“计算机获胜:”,(ilose),“次”
打印“tie:,(tie),“Times”

您需要线程来完成您的出价

示例代码

# Listen
s.listen(10)
print 'Socket now listening on port ' + str(PORT) + "..."

while 1:
    # wait
    conn, addr = s.accept()

    print 'Connected with ' + addr[0] + ":" + str(addr[1])

    # Let's fork a thread for each request
    processThread = threading.Thread(target=processConnection, args=(conn, addr[0]));
    processThread.start()


s.close()
您的
processConnection
将如下所示:

# Process Connection
def processConnection(conn, ip):
    print "Thread started..."
    print "-------------------------------------------------------------";

    cpu = random.choice(range(0, 3))
    conn.send(cpu)

    gameon = conn.recv(int(1024))

    conn.close()
更新1

如果您需要服务器与客户机保持对话,那么就这样做。服务器将等待客户端发回消息。若客户端发送任何内容,服务器将返回一个随机数。如果客户端不再需要数据,只需关闭连接,服务器循环就会结束

import socket, random               

sock = socket.socket()
host = socket.gethostname()
port = 12345
sock.bind((host, port))
sock.listen(5)

c, addr = sock.accept()

white True:
    cpu = random.choice(range(0, 3))
    c.send(cpu)

    gameon = c.recv(int(1024))

    if gameon is None:
        break

问题是您的服务器将提供一个请求,然后停止。你需要把它放在某种while循环中


我用Python编写了一个基本的IM服务器/客户端,可能会对您有所帮助:

Hmm无法实现这一点:(它仍然只是根据请求发送,然后停止。这正是它所做的。它应该做什么?一个接一个地发送10个随机数?服务器需要时不需要,但它只能像以前一样工作1次:)我如何让它工作10次请解释一下。当客户端连接时会发生什么?我认为客户端和服务器一直都是连接的,我可以在代码末尾关闭连接,对吗?我知道如果你想连接多个客户端,线程是有用的,但这并不重要。现在游戏第一次运行是因为服务器通过conn.send(cpu)发送了一个号码,但是当游戏第二次循环时,它从来没有发送过另一个号码bcuz它不知道什么时候发送它,它从来没有收到请求或者它想要的任何东西:(也许我应该重新开始,把游戏服务器端和客户端连接起来。