#-*- 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模块实现了一个简单的网络五子棋游戏,可以进行双人对战。

代码解析:

  1. NETWORK_SUPPORT: 控制是否开启网络功能的变量,设置为1则开启,0则关闭。
  2. HOST: 对方服务器的地址,默认为 'localhost',可以根据实际情况修改。
  3. ChessNetwork:
    • sendChessMove 方法: 将棋子移动信息(起始坐标和目标坐标)打包成字符串,通过socket发送到对方服务器。
    • getChessMove 方法: 监听指定端口,接收对方服务器发送的棋子移动信息,解析后返回。
  4. 主程序:
    • 根据命令行参数判断是作为服务器还是客户端运行。
    • 服务器端调用 getChessMove 方法接收客户端发送的棋子移动信息。
    • 客户端调用 sendChessMove 方法发送棋子移动信息到服务器。

使用说明:

  1. 将代码保存为Python文件,例如 'chess_network.py'。
  2. 在两个不同的终端中运行该文件,一个作为服务器,一个作为客户端。
  3. 运行服务器端:python chess_network.py server (server可以是任意字符串)
  4. 运行客户端:python chess_network.py

注意:

这只是一个简单的示例代码,没有实现完整的五子棋游戏逻辑,仅用于演示如何使用Socket进行网络通信。

Python Socket实现网络五子棋对战

原文地址: https://www.cveoy.top/t/topic/fynJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录