加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

中国象棋(网络版) 转载

发布时间:2020-12-15 21:12:54 所属栏目:asp.Net 来源:网络整理
导读:div class="postTitle" a class="postTitle2" id="viewpost1_TitleUrl" href="http://www.cnblogs.com/KeithDan/archive/2007/07/08/810222.html"gt;font color="#646464"中国象棋(网络版) 最近时间有点忙,本来象棋游戏是有一个网络版本的,但是由于最近时间

<div class="postTitle">
<a class="postTitle2" id="viewpost1_TitleUrl" href="http://www.cnblogs.com/KeithDan/archive/2007/07/08/810222.html"&gt;<font color="#646464">中国象棋(网络版)
最近时间有点忙,本来象棋游戏是有一个网络版本的,但是由于最近时间比较忙,一直没发出来.最近有一些朋友希望看到网络版象棋,本来这个是学生将做的项目,这里我把这个DEMO给大家,相互学习.网络象棋,不得不说一下TCP/IP协议,这其实是两个协议,即tcp协议和ip协议。所谓IP协议,IP协议是在网络层的协议.它主要完成数据包的发送作用。所谓TCP协议,TCP协议也是建立在IP协议之上的,不过TCP协议是可靠的.按照顺序发送的。所以正是由于他们的特性,使得他们一起可以使我们网络数据传输可靠。一般我们常说的TCP/IP“三次握手”,其实也就是第一步客户机向服务器发送一个TCP数据包,表示请求建立连接,第二步服务器接收到请求数据包以后再向客户端发送一次响应数据包,第三步客户机接收到以后再想服务器发送一次确认数据包。服务器接受到以后,我们的连接也就成功。那么socket(套接字)呢?其实也就是两台机器的远程节点,它的操作也包括,打开,关闭,读写等等。具体的呢,大家可以去看一下关于TCP/IP的书,这里我就不予累赘。这里呢,本来最早是用了一套我封装好的socket库来做连接和数据传输,后来由于一些原因要把把项目难度减小,所以就用了.net标准的TcpListener和TcpClient来做连接。 这里呢主要是采用原来单机版象棋进行功能扩展的,其实所谓网络版本,也就是将原本在电脑的输入操作换做网络数据输入,所以其他算法和设计都基本一样。这里我讲一下具体实现的网络部分首先需要创建网络服务器和客户机的登陆部分<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">?<img src="https://www.52php.cn/res/2019/03-05/00/02e5a4fa64cfb9631c9e1ec3f767b495.jpg" border="0"><lock aspectratio="t" v:ext="edit">分为服务器和客户机登陆以后:客户端:<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
<img src="https://www.52php.cn/res/2019/03-05/00/a6339ee3e57d1d52bc7d02b338e15a60.gif" align="top">??????????????? <span style="COLOR: #000000">TcpClient?client?<span style="COLOR: #000000">=<span style="COLOR: #000000">?<span style="COLOR: #0000ff">new<span style="COLOR: #000000">?TcpClient();

<img src="https://www.52php.cn/res/2019/03-05/00/a6339ee3e57d1d52bc7d02b338e15a60.gif" align="top">????????????????IPAddress?ip?

<span style="COLOR: #000000">=<span style="COLOR: #000000">?IPAddress.Parse(<span style="COLOR: #0000ff">this<span style="COLOR: #000000">.tbIP.Text);

<img src="https://www.52php.cn/res/2019/03-05/00/a6339ee3e57d1d52bc7d02b338e15a60.gif" align="top">????????????????

<span style="COLOR: #0000ff">int<span style="COLOR: #000000">?port?<span style="COLOR: #000000">=<span style="COLOR: #000000">?Convert.ToInt32(?tbPort.Text);<img src="https://www.52php.cn/res/2019/03-05/00/a6339ee3e57d1d52bc7d02b338e15a60.gif" align="top">????????????????client.Connect(ip,port);

<img src="https://www.52php.cn/res/2019/03-05/00/a6339ee3e57d1d52bc7d02b338e15a60.gif" align="top">????????????????Flag.PlayerType?

<span style="COLOR: #000000">=<span style="COLOR: #000000">?Enums.ChessType.red;

<img src="https://www.52php.cn/res/2019/03-05/00/a6339ee3e57d1d52bc7d02b338e15a60.gif" align="top">????????????????TcpTransfer?tranfer?

<span style="COLOR: #000000">=<span style="COLOR: #000000">?<span style="COLOR: #0000ff">new<span style="COLOR: #000000">?TcpTransfer(client);

服务器则是需要建立监听:

这里呢,大家注意一下,由于我们的象棋作用是在子线程上,而窗体呢是在主线程上,如果我们用子线程去改变主线程的窗体,则会带来异常或者线程的阻塞。于是,定义了三个委托来处理窗体改变(棋子位置变换问题)问题。

在我们TCP事件里面,则采用invoke异步的模式进行委托

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读