用python编写程序:服务器上存储了一个0到1,000,000之间的整数,接收来自客户端猜测的数字,如果数字与服务器数字相等则发送成功,否则如果猜测的数字大于服务器上数字则发送“big”,小于则发送“small”。服务器统计每个客户端猜测正确所需次数,选出猜测次数最小的成为获胜者,并公布所有客户端的成绩。
时间: 2023-12-02 18:06:04 浏览: 72
Python如何发送与接收大型数组
好的,这是一个简单的服务器-客户端通信问题,可以使用socket库进行编写。以下是一个简单的Python程序,实现了上述功能:
服务器端代码:
```python
import socket
import random
# 生成随机数字
num = random.randint(0, 1000000)
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
port = 8888
# 绑定端口号
server_socket.bind((host, port))
# 设置最大连接数,超过后排队
server_socket.listen(5)
# 记录每个客户端的猜测次数
scores = {}
print("等待客户端连接...")
while True:
# 建立客户端连接
client_socket, addr = server_socket.accept()
print("连接地址: %s" % str(addr))
# 发送欢迎消息
msg = "欢迎来猜数字游戏!"
client_socket.send(msg.encode())
# 接收客户端的猜测
while True:
guess = client_socket.recv(1024).decode()
if not guess:
break
guess = int(guess)
if guess == num:
msg = "猜对了,恭喜你!"
client_socket.send(msg.encode())
# 记录猜测次数
if addr[0] not in scores.keys():
scores[addr[0]] = 1
else:
scores[addr[0]] += 1
break
elif guess > num:
msg = "big"
client_socket.send(msg.encode())
else:
msg = "small"
client_socket.send(msg.encode())
# 关闭连接
client_socket.close()
# 打印客户端成绩
print("客户端成绩:")
for key, value in scores.items():
print(key, ":", value)
# 找到猜测次数最小的客户端
winner = min(scores, key=scores.get)
print("获胜者是:", winner)
```
客户端代码:
```python
import socket
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
# 设置端口号
port = 8888
# 连接服务,指定主机和端口
client_socket.connect((host, port))
# 接收欢迎消息
msg = client_socket.recv(1024).decode()
print(msg)
# 猜数字
while True:
guess = input("请输入你猜测的数字:")
client_socket.send(guess.encode())
if guess == "exit":
break
msg = client_socket.recv(1024).decode()
print(msg)
if msg == "猜对了,恭喜你!":
break
# 关闭连接
client_socket.close()
```
运行服务器端代码后,会在终端上显示等待客户端连接的消息。此时运行客户端代码,输入任意数字进行猜测,直到猜测正确或输入“exit”退出游戏。服务器端会记录每个客户端的猜测次数,并在游戏结束后公布所有客户端的成绩并找到猜测次数最小的客户端作为获胜者。
阅读全文