Python Socket实现网络五子棋对战
#-*- encoding: utf-8 -*-
import socket
import sys
NETWORK_SUPPORT = 0 # 是否提供网络支持,1为开启,0为关闭
HOST = 'localhost' # 对方服务器地址
class ChessNetwork():
'''
提供网络支持,既是客户端,也是服务器, p2p
'''
host = ''
port = 64255
def sendChessMove(self, rowFrom, colFrom, rowTo, colTo):
'''
向对方服务器发送棋子移动信息
'''
if NETWORK_SUPPORT == 0:
return None
msg = '%d,%d,%d,%d' % (rowFrom, colFrom, rowTo, colTo)
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, self.port))
print 'sendChessMove:'
print msg
s.send(msg)
s.close()
except :
print 'exception when sendChessMove'
def getChessMove(self):
'''
从对方服务器获取棋子移动信息
'''
if NETWORK_SUPPORT == 0:
return None
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind((self.host,self.port))
s.listen(1)
print 'getChessMove : accept'
clientsock,clientaddr = s.accept()
while 1:
data = clientsock.recv(1024)
if not data:
break
clientsock.close()
listRet = data.split(',')
for i in range(len(listRet)):
listRet[i] = int(listRet[i])
return listRet
if __name__ == '__main__':
#测试
net = ChessNetwork()
if len(sys.argv) > 1:
#服务器
print net.getChessMove()
else:
#客户端
net.sendChessMove(0, 0, 1, 1)
这段代码使用Python的Socket模块实现了一个简单的网络五子棋游戏,可以进行双人对战。
代码解析:
NETWORK_SUPPORT: 控制是否开启网络功能的变量,设置为1则开启,0则关闭。HOST: 对方服务器的地址,默认为 'localhost',可以根据实际情况修改。ChessNetwork类:sendChessMove方法: 将棋子移动信息(起始坐标和目标坐标)打包成字符串,通过socket发送到对方服务器。getChessMove方法: 监听指定端口,接收对方服务器发送的棋子移动信息,解析后返回。
- 主程序:
- 根据命令行参数判断是作为服务器还是客户端运行。
- 服务器端调用
getChessMove方法接收客户端发送的棋子移动信息。 - 客户端调用
sendChessMove方法发送棋子移动信息到服务器。
使用说明:
- 将代码保存为Python文件,例如 'chess_network.py'。
- 在两个不同的终端中运行该文件,一个作为服务器,一个作为客户端。
- 运行服务器端:
python chess_network.py server(server可以是任意字符串) - 运行客户端:
python chess_network.py
注意:
这只是一个简单的示例代码,没有实现完整的五子棋游戏逻辑,仅用于演示如何使用Socket进行网络通信。
原文地址: https://www.cveoy.top/t/topic/fynJ 著作权归作者所有。请勿转载和采集!