网络五子棋这款软件产品功能设计的功能

您的位置:&-&-> -& 网络五子棋 2.1.10
同类周下载排行
软件授权:免费软件
软件大小:108KB
人气指数:0
软件语言:简体中文
软件评级:
运行环境:Win9x/Me/NT/2000/XP/2003
更新时间:
出 品 人:&&
软件合集:
本软件“网络五子棋”是一款免费的小游戏,本软件具有如下功能:单机游戏模式,可以进行人机对战,自由选择是否执黑先行,并具有交换选手和悔棋等功能;网络游戏模式,可以做为服务器或客户端双人联机对战,游戏规则为:棋盘为15×15型,棋手自由选择是否先手,先得到“五子连珠”者为胜。
由于本软件正在进行AI算法测试,希望大家提供宝贵的意见,以便于我们进一步改进。
热门软件推荐
热门安卓应用推荐Total Commander 这款软件使用体验如何,有哪些优点和不足?
按投票排序
首先私心说一句,这是神器,也是唯一一款好用到让我心甘情愿付款买了正版的软件。Total Commander实际上并不是“一个”软件,而是一个“资源管理工具集”,里面集成了大量你在管理资源时要用到的工具/功能,并且提供了快捷键操作,让你在处理资源时可以相当方便快捷。而且因为是图形界面的,所以比命令行要方便,更容易使用。首先说说坏的部分。我上手这个软件的时候,曾经放弃过几次,这也是很多现在的TC死忠的经历过的事情。为什么?首先TC是提倡键盘操作的,对于鼠标并没有太多的支持,比如我们在Windows文件管理器中常用到的框选一批图标在TC中是做不到的,你无法框选。而框选恰恰是很常用的操作,无法框选就让很多人无法适应,包括我自己,在开始的时候也无法适应。当然现在我习惯用shift+鼠标来做范围选择了,不过对于不爱用键盘的人而言,TC强调键盘操作完全无法接受,而对于这些用户,实际上和TC同类型、一样强大、但是走鼠标流路线的软件Directory Opus。另一个,TC很丑,原版的真的很丑,相当刺眼,UI给人的感觉就是简陋,对于一个天天要面对的软件而言这个界面是在很难接受。而对于刚上手的人来说并没有能力去修改这个界面,直接导致了很多人放弃。因此,建议初初接触的人使用网上的一些美化过的版本,比如张学思的修改版,或者使用精品论坛的版本,看起来会顺眼很多。同时,上面提到的Directory Opus原生界面就是类似Windows资源管理器的,所以更为人所接受,刚上手这个软件的时候,多数还没有需求。也就说,TC提供的功能你那个时候还用不上,所以对于要花时间去适应就觉得很麻烦。而我真正为TC所折服,并且爱上TC,其实就是它为我解决了问题的时候。现在说说TC有什么好用的,当然也只是说说,在你用不到这些需求的时候,这些好用的地方你是感受不到的。遗憾的是,TC为我解决的第一个问题已经是很久很久以前的事情了,我已经记不清楚了。第一点要提的就是双窗口和队列式移动/复制有的用户使用TC是用单窗口的,但是TC默认情况下是划分为左右两个窗口的,有的增强资源管理软件会分为四个窗口。双窗口的作用就是让你可以快速地复制或者移动文件。一个窗口一个文件夹,你在一个窗口选中你要的文件(文件选择多方便下面再说),然后按一下快捷键F5(可修改),那么就会弹出一个对话框,问你是不是要把文件移动到另一个窗口去,这里有一些很棒的选项,特别是队列选项(快捷键F2)。Windows默认的粘贴方式,是并行式的,也就是说,会同时有几个文件一起粘贴,如果文件数量多,就会相当慢。而队列的意思就是,文件会一个一个排着队来移动,先移动完了一个文件,再移动下一个文件。在移动大量文件的时候,这种方式会明显快得多,而且占用的资源会更少,不会出现资源管理器全力在移动文件,导致其他操作无法进行的情况。因此在进行队列操作的时候,你依然可以继续用TC进行其他工作。当然,有很多Fast Copy、TeraCopy这样的专门的文件移动增强软件。TC和这些专门软件比还是有点差距(说的是移动几百兆零碎文件这样的场景,日常移动百来个文件感觉不出来)。当然,说TC是神器不是随便说的,TC也可以调用这些软件来做这些工作,这样你就能既享受TC方便的文件选择功能,又用上强大的文件移动软件。第二点,极方便的文件选择和定位我们选文件,往往有几种需求:按文件名、按大小、按后缀、按时间、音频的按歌手、专辑、时间之类、照片按ISO、焦距、快门、图片按长宽比什么的。基本上你能想到的,不是太特殊的,都有,你可以按这些属性来筛选文件。如果只是后缀名的,在一个文件上按一下快捷键F11,那么所有同后缀的都会选中。而TC的快速搜索也是很棒的功能。比如,文件夹中有a、b、c、安四个文件,你按一下a,就会定位到a,再按一次,就会定位到“安(an)”,因为是支持拼音的。而快速搜索也能支持筛方式,也就是只显示文件名符合的项,比如按了“a”,那么其他文件就会隐藏,只显示“a”和“安”两个文件。在你要快速查找文件的时候这个功能实在是太棒了。如果你接下来要移动或者复制这些文件,不用想了,ctrl+a全选,然后按F5吧。另外,TC还能导入文件列表,也就是一个txt(或者其他文本文件),里面列出来要选中的文件,导入TC,那么这些文件就会被选中,之后你爱干嘛干嘛。第三个,自带压缩工具TC自带了对压缩文件的支持(内置了这些压缩工具的命令行版本,通过TC统一调用),一般的rar、zip、7z、tar、gz之类的都是可以解压的,而除了rar,都能压缩(因为winrar的压缩是要授权的,所以你要安装了winrar,TC才能调用Winrar来进行压缩)。这就意味着,很多情况想你都不用安装压缩软件了,我现在电脑里就没有。但是,如果你是做资源发布工作的,需要一些高级的压缩功能(比如添加恢复数据呀),那么还是要用的。当然一般的分卷、加密码之类的事情就不用了。自带这些工具好处就是,对于压缩包,你可以在不解压的情况下直接进入,并且查看里面的内容,就好像浏览一般文件夹一样,相当方便。第四点,强大的批量重命名该有的都有了。比如自动计数(1、2、3这样递增),插入路径、插入时间、日期、插入exif、文件大小等等等等。正则表达式也有了。也支撑导入文件名列表,也就是你用一个文件写好怎么改,然后导入TC里面。经我自己测试,一般数量的文件,比如几百个的,一会就能改完了,速度还是可以接受的。我自己测试,10000个文件,改一次不到1分钟。我还没有遇到过TC改不了需要借助其他软件的情况。第五点,快速查看TC按F3可以调用一个多功能查看软件Lister,一般图片、文本、pdf、视频都可以用这个查看。第六点,快速编辑TC有个很棒的插件,叫做F4Menu,这个东西绑定TC的F4快捷键(可以改),对于不同类型的文件,会调用不同的程序来打开。比如txt文件,按一下F4,就还打开notepad,如果是jpg,按一下就会打开PS,如果是doc,按一下就打开word。非常方便。不影响文件关联,你按一下回车,还是用默认软件打开。当然TC内部也可以设置文件关联,不依赖Windows。第七点,一些小功能比如你想要知道一个文件夹里面,哪些文件占了最多空间,把光标定位在根目录,按一下ctrl+q,就除了一个饼图,让你直观看到那个文件占最多,也可以切换成柱形图什么的。比如你要复制一个文件的文件名,那么按一下F9就可以了。如果是一批文件的,选中这些文件,按一下F9就可以了。按F12的话是连同完整路径都复制出来。TC也有FTP功能,可以连接上FTP服务器,上传下载都可以。TC有控制台,可以直接使用CMD的命令。内置校验工具,MD5、SHA1之类的校验都是可以做的。可以合并和分割文件。有文件/文件夹的比较和文件夹同步功能,对于有些人来说应该是很有用的功能,但是我没有有过,所以不详细说了。内置查找功能,可以查找文件名、内容、时间之类的。结果可以输出到列表。列表的意思是输出到TC的窗口里,你爱干嘛干嘛。新建文件夹、新建文件之类的都有快捷键,很方便,这个我常用。支持收藏夹,也就是常用的文件夹呀之类的都可以放里面,而且收藏夹是支持使用命令的,也就是说可以用来启动软件,类似Windows的开始菜单。有标签页,就是浏览器那样的标签,方便切换窗口。还有很多你可能会用到的小功能。总结而言,TC就是这样的一个工具集,有了TC,你就可以少装很多杂七乱八功能单一的小软件了。
这货的功能很多,估计要3天3夜才讲得完,结合我的实际使用情况简单说下吧:1、Quicksearch with filter (快速查找及过滤)简单的讲就是键入几个字母就能快速过滤出"文件名包含这几个字母"的文档。简单的讲就是键入几个字母就能快速过滤出"文件名包含这几个字母"的文档。支持"中文拼音首字母",比如有个文档名为"张美女发货汇总",你可以键入"张美女",你也可以键入"zmn"。本方法适用于当一个文件夹中有很多文档时,快速找到想要的文档。特别要说明的是:可以更改对应的拼音码表,使之符合你的输入习惯,比如我使用双拼方案,将码表修改下,寻找上面的张美女文档就变成输入"vmn"。同理可以改为五笔码表。2、显示当前文件夹和它的子文件夹中的全部文件我经常需要用到同事电脑上的文档,网络邻居连接其电脑后,我知道文档的大概位置(比如2013文件夹),却不知道具体的位置,也不知道文件名称。2013文件夹的根目录中可能有10几个子文件夹,几十个文件。10几个子文件夹中可能还有再下一级的文件夹,我要找的那个文件可能就那里。这时候,我就展开显示所有的文件,然后按日期排序,再用"第1点提到的功能"快速过滤出文件类型(比如".xls"),那么我两下就能找到想要的文件。3、对文档标颜色每个欠款已经结清的客户对应的结算文档,我都会在文件名中加入"已结清"字样,然后在TC中设置文件名包含"已结清"的"xls"文档显示为灰色。这样一目了然,哪些结算文档已经没有打开的必要了。4、边预览边改名可以在另一窗口中迅速阅预本窗口中的文档,比如txt,图片等等可以在另一窗口中迅速阅预本窗口中的文档,比如txt,图片等等相机里导出的照片名字都是日期或者数字,我经常用tc边预览照片边将文件名改为更为适当的名称。windows在打开文档的情况下是无法改名的。5、TC的双窗口,多tab,工具栏双窗口在复制剪切移动文档时优势明显,如果你不喜欢的话也可以弄成单一窗口。双窗口都支持多tab,tab可以锁定,完全可以将常用的文件夹琐定住。工具栏上可以放常用的软件,类似windows任务栏上的快速启动栏。。。。。。。。。。。还有很多功能我就不说了。6、我要说的不仅仅是tc他们说这货很丑,这跟我一点关系都没有,我用autohotkey隐藏了tc的标题栏、菜单栏、工具栏等等,我的tc界面就是双窗口+路径栏,连展现丑的机会都没有。当我需要上面那些模块的时候,我依然可以一键调出,不用了立马一键隐藏。他们说tc是键盘流,实际上tc+autohotkey才是更进一步的键盘流。用了ahk,我设置了当capslock打开的情况下,c为复制,x为剪切,d为关闭当前tab,v为快速预览,b为跳到上一层文件夹,n为批量重命名,w为循环切换视图显示方式,r为调用指定程序打开当前文档等等。f为打开tc收藏夹同时退出caps模式,再按一下按键即打开对应的文档或文件夹(所以tc中我基本没保存多tab)。autohotkey还可以快速启动程序,所以tc的工具栏也可以不怎么用了。没错,我在引诱你去学习tc+autohotkey。
使用量不大,则不可能熟练。则效率还不如基本的方式。
赞同@苏书的回答,用tc也有八九年了,习惯了自己原版自定义。说说我常用的功能:quick search,这个是眼神不好的使用者的必备插件,结合ctrl+b展开子目录下所有文件,然后输入拼音首字母或者直接输入汉字定位文件。可以空格增量输入,比如输入“bw doc”就可以定位“念念不忘必有回响.DOC”或者类似的文件了,这个功能结合everything,只要文件名定义时稍加注意,主谓宾或者文件的来龙去脉描述清晰,可以秒杀任何文件管理软件。我整理收藏了相关专业将近400G的读秀电子书做资料库,查找极其方便。可以不同颜色显示近1天、近3天、近7天的文件,这个xbeta的教程里有教,不展开说了;批量更名,支持正则和插件,也支持文本导入导出,稳定;其实TC的好处是满足了一竿宅男的需求,可玩性高,而且作者和大家一起玩,支持非常多非常宅的玩法,当然,功能是只有想不到没有做不到。玩这个,首先就贴上了宅男的标签,慎入。
根据个人喜好和操作习惯吧以前也试过TC后来不太适应换到Qdir一直沿用至今基本上不爱用vim的人都不怎么喜欢TC。。。
TC电脑必装软件!开机启动,完全可以取代windows自带的资源管理器!配以万能一点也不为过!
我觉得c+m,c+b,c+d,c+q是tc的精华所在! 很小的软件,才3兆多,试问目前现在有那么到功能的软件那一款能有如此厉害!
我是通过善用佳软了解TC的(可能大部分人都是吧),所以还是推荐你看他的介绍:TC之于资源管理,就像Vim在文本编辑的地位。高门槛会拦住很多人,而越过去的都认为是神器。就看你自己衡量投入产出是否值得。
很多接触过tc的人都会惊叹他的强大,但是就像vim一样,最后能驯服并长时间在工作中让其发挥作用的人恐怕是小部分吧,同样在学和用tc的过程中也经历过很多的坚持和探索,就现在所能达到的认识程度写下来和大家分享官网个人界面风格习惯了多tab标签页的操作方式习惯了多tab标签页的操作方式常用功能文件夹操作tab标签页
1. 新建标签 ctrl+t
在当前标签页下按ctrl+t可以新建一个和当前一样的tab
2. 关闭标签 ctrl+w
关闭当前标签页
3. 定位标签
点击g键,弹出快捷键提示框,可以很方便的实现标签定位新建
在任何标签页下,按i键,然后按w键即可创建文件夹2. 并列多文件夹2. 并列多文件夹
3. 嵌套多文件夹比较
选定要比较的两个目标文件夹,从菜单项启动比较功能收藏
在任何标签页下,按d键,弹出文件夹收藏列表提示框;比如先d后z就可以直接打开桌面文件夹;支持直接收藏和自定义重命名
选择文件夹后,按r键cmd操作
在任何标签页下,按shift+e键,直接打开cmd窗口并且cd到当前标签页对应的目录文件夹内容统计
在任何标签页下,按ctrl+q键,直接打开统计信息窗口文件操作排序
在任何标签页下,按s键,弹出排序对话框选择
选定某一个文件,按]键,可将全部同后缀文件选中;按}键可,清除选中2. 同文件名2. 同文件名
选定某一个文件,按[键,可将全部同文件名的文件选中;按{键可,清除选中定位
1. 文件夹根下的文件
vim风:j向下移动、k向上移动、b相当于pageup、f相当于pagedown
利用QuickSearch eXtended插件可以完美实现在一个文件夹下的所有文件之间的查找和定位,支持中文、中文首字母、英文;在文件夹下按/键,激活快速搜索功能,然后输入2,再输入ty(太阳的拼音首字母)
2. 文件夹树下的文件
按?键,可在标签页对应的目录结构内搜索;可以将搜索结果输出到列表,方便下一步处理,比如全部copy批量重命名
选定需要批量重命名的文件集,按ctrl+m键后;按各种条件完成批量重命名快速查看
选定需要快速查看内容的文件,按ctrl+q键,打开快速查看窗口;通过plugin实现多种文件格式的快速查看比较
选定两个目标文件,实施比较以平铺的方式列出嵌套在文件夹树中的所有文件
选定目标文件夹,按ctrl+b键
取得文件名
1. 只文件名
按y键,可copy文件名
2. 全路径文件名
按Y键,可copy全路径其他FTP支持压缩/解压缩浏览历史
可以通过H,L键实现在文件夹浏览历史记录里跟踪跳转(类似于ctrl+z和ctrl+y的功能). 操作符
重复上次操作(类似于excel中的F4)快捷键/autohotkey上面所有的操作都是用快捷键完成的,tc本身的快捷键就很完备,结合vim化的viatc的支持,更加得心应手。更多期待grep检索
这个功能是很需要的,现在借助hidemaru来实现;当然在sublime、atom编辑环境里自带的grep很好用
推崇键盘操作会淘汰?就盲操作这一条优势,生产效率上就够秒杀鼠标和触屏操作了
愿意花钱买TotalCommand的用户,为什么不用FreeCommander——后者有前者几乎所有的功能,还是免费的。关于TC/FC,请不要把他等价于键盘党——使用键盘固然会效率更高,但单凭一下几点(键盘无关)的特性,已经秒杀windows的文件夹了:1. 双窗口功能:让你同时看到两个文件夹,尤其是在有选择的复制文件时候多方便;2. Tab功能:一个窗口内还可以打开多个tab,想选择哪个一目了然;3. 记忆功能:你常用的文件夹可能就那么不到10个,tab打开放在那儿,关机下次打开就都还在那,还不占用任务栏的显示,多好。其实他的功能真的还有很多很多,参考善用佳软的文章吧。面向的用户:如果你对于Windows的文件夹操作觉得效率太低不耐烦的话,就请试试看FreeCommander吧,下载地址(安装好之后,选项里面支持中文的):感谢
提醒,添加FreeCommander官网链接:
已有帐号?
无法登录?
社交帐号登录java网络五子棋的源代码
阅读:3074次&&&时间: 00:00:00&&
下面的源代码分为4个文件;chessClient.java:客户端主程序。chessInterface.java:客户端的界面。chessPad.java:棋盘的绘制。chessServer.java:服务器端。可同时容纳50个人同时在线下棋,聊天。没有加上详细注释,不过绝对可以运行,j2sdk1.4下通过。/*********************************************************************************************1.chessClient.java**********************************************************************************************/import java.awt.*;import java.awt.event.*;import java.io.*;import java.net.*;import java.util.*;class clientThread extends Thread{&chessC&clientThread(chessClient chessclient)&{&&this.chessclient=&}&public void acceptMessage(String recMessage)&{&&if(recMessage.startsWith("/userlist "))&&{&&&StringTokenizer userToken=new StringTokenizer(recMessage," ");&&&int userNumber=0;&&&chessclient.userpad.userList.removeAll();&&&chessclient.inputpad.userChoice.removeAll();&&&chessclient.inputpad.userChoice.addItem("所有人");&&&while(userToken.hasMoreTokens())&&&{&&&&String user=(String)userToken.nextToken(" ");&&&&if(userNumber&0 && !user.startsWith("[inchess]"))&&&&{&&&&&chessclient.userpad.userList.add(user);&&&&&chessclient.inputpad.userChoice.addItem(user);&&&&}&&&&userNumber++;&&&}&&&chessclient.inputpad.userChoice.select("所有人");&&}&&else if(recMessage.startsWith("/yourname "))&&{&&&chessclient.chessClientName=recMessage.substring(10);&&&chessclient.setTitle("Java五子棋客户端&& "+"用户名:"+chessclient.chessClientName);&&}&&else if(recMessage.equals("/reject"))&&{&&&try&&&{&&&&chessclient.chesspad.statusText.setText("不能加入游戏");&&&&chessclient.controlpad.cancelGameButton.setEnabled(false);&&&&chessclient.controlpad.joinGameButton.setEnabled(true);&&&&chessclient.controlpad.creatGameButton.setEnabled(true);&&&}&&&catch(Exception ef)&&&{&&&&chessclient.chatpad.chatLineArea.setText("chessclient.chesspad.chessSocket.close无法关闭");&&&}&&&chessclient.controlpad.joinGameButton.setEnabled(true);&&}&&else if(recMessage.startsWith("/peer "))&&{&&&chessclient.chesspad.chessPeerName=recMessage.substring(6);&&&if(chessclient.isServer)&&&{&&&&chessclient.chesspad.chessColor=1;&&&&chessclient.chesspad.isMouseEnabled=&&&&chessclient.chesspad.statusText.setText("请黑棋下子");&&&}&&&else if(chessclient.isClient)&&&{&&&&chessclient.chesspad.chessColor=-1;&&&&chessclient.chesspad.statusText.setText("已加入游戏,等待对方下子...");&&&}&&}&&else if(recMessage.equals("/youwin"))&&{&&&chessclient.isOnChess=&&&chessclient.chesspad.chessVictory(chessclient.chesspad.chessColor);&&&chessclient.chesspad.statusText.setText("对方退出,请点放弃游戏退出连接");&&&chessclient.chesspad.isMouseEnabled=&&}&&else if(recMessage.equals("/OK"))&&{&&&chessclient.chesspad.statusText.setText("创建游戏成功,等待别人加入...");&&}&&else if(recMessage.equals("/error"))&&{&&&chessclient.chatpad.chatLineArea.append("传输错误:请退出程序,重新加入 \n");&&}&&else&&{&&&chessclient.chatpad.chatLineArea.append(recMessage+"\n");&&&chessclient.chatpad.chatLineArea.setCaretPosition(&&&&chessclient.chatpad.chatLineArea.getText().length());&&}&}&public void run()&{&&&& String message="";&&&& try&&&& {&&&while(true)&&&{&&&&message=chessclient.in.readUTF();&&&&acceptMessage(message);&&&}&&}&&catch(IOException es)&&{&&}&}}&&public class chessClient extends Frame implements ActionListener,KeyListener{&userPad userpad=new userPad();&chatPad chatpad=new chatPad();&controlPad controlpad=new controlPad();&chessPad chesspad=new chessPad();&inputPad inputpad=new inputPad();&Socket chatS&DataInputS&DataOutputS&String chessClientName=&String host=&int port=4331;&boolean isOnChat=& //在聊天?&boolean isOnChess= //在下棋?&boolean isGameConnected= //下棋的客户端连接?&boolean isServer= //如果是下棋的主机&boolean isClient= //如果是下棋的客户端&Panel southPanel=new Panel();&Panel northPanel=new Panel();&Panel centerPanel=new Panel();&Panel westPanel=new Panel();&Panel eastPanel=new Panel();&chessClient()&{&&super("Java五子棋客户端");&&setLayout(new BorderLayout());&&host=controlpad.inputIP.getText();&&westPanel.setLayout(new BorderLayout());&&westPanel.add(userpad,BorderLayout.NORTH);&&westPanel.add(chatpad,BorderLayout.CENTER);&&westPanel.setBackground(Color.pink);&&inputpad.inputWords.addKeyListener(this);&&chesspad.host=controlpad.inputIP.getText();&&centerPanel.add(chesspad,BorderLayout.CENTER);&&centerPanel.add(inputpad,BorderLayout.SOUTH);&&centerPanel.setBackground(Color.pink);&&controlpad.connectButton.addActionListener(this);&&controlpad.creatGameButton.addActionListener(this);&&controlpad.joinGameButton.addActionListener(this);&&controlpad.cancelGameButton.addActionListener(this);&&controlpad.exitGameButton.addActionListener(this);&&controlpad.creatGameButton.setEnabled(false);&&controlpad.joinGameButton.setEnabled(false);&&controlpad.cancelGameButton.setEnabled(false);&&southPanel.add(controlpad,BorderLayout.CENTER);&&southPanel.setBackground(Color.pink);&&addWindowListener(new WindowAdapter()&&{&&&public void windowClosing(WindowEvent e)&&&{&&&& if(isOnChat)&&&& {&&&&& try&&&&& {&&&&&& chatSocket.close();&&&&& }&&&&& catch(Exception ed)&&&&& {&&&&& }&&&& }&&&& if(isOnChess || isGameConnected)&&&& {&&&&& try&&&&& {&&&&&& chesspad.chessSocket.close();&&&&& }&&&&& catch(Exception ee)&&&&& {&&&&& }&&&& }&&&&System.exit(0);&&&}&&&public void windowActivated(WindowEvent ea)&&&{&&&}&&});& &&&& add(westPanel,BorderLayout.WEST);&&&&& add(centerPanel,BorderLayout.CENTER);&&&&& add(southPanel,BorderLayout.SOUTH);&&pack();&&setSize(670,548);&&setVisible(true);&&setResizable(false);&&validate();&}&&public boolean connectServer(String serverIP,int serverPort) throws Exception&{&&try&&{&&&chatSocket=new Socket(serverIP,serverPort);&&&in=new DataInputStream(chatSocket.getInputStream());&&&out=new DataOutputStream(chatSocket.getOutputStream());&&&clientThread clientthread=new clientThread(this);&&&clientthread.start();&&&isOnChat=&&&&&}&&catch(IOException ex)&&{&&&chatpad.chatLineArea.setText("chessClient:connectServer:无法连接,建议重新启动程序 \n");&&}&&&}& public void actionPerformed(ActionEvent e)& {&&&if(e.getSource()==controlpad.connectButton)&&&{&&&&host=chesspad.host=controlpad.inputIP.getText();&&&&try&&&&{&&&&&if(connectServer(host,port))&&&&&{&&&&&&chatpad.chatLineArea.setText("");&&&&&&controlpad.connectButton.setEnabled(false);&&&&&&controlpad.creatGameButton.setEnabled(true);&&&&&&controlpad.joinGameButton.setEnabled(true);&&&&&&chesspad.statusText.setText("连接成功,请创建游戏或加入游戏");&&&&&}&&&&}&&&&catch(Exception ei)&&&&{&&&&&chatpad.chatLineArea.setText("controlpad.connectButton:无法连接,建议重新启动程序 \n");&&&&}&&& }&&& if(e.getSource()==controlpad.exitGameButton)&&& {&&&& if(isOnChat)&&&& {&&&&& try&&&&& {&&&&&& chatSocket.close();&&&&& }&&&&& catch(Exception ed)&&&&& {&&&&& }&&&& }&&&& if(isOnChess || isGameConnected)&&&& {&&&&& try&&&&& {&&&&&& chesspad.chessSocket.close();&&&&& }&&&&& catch(Exception ee)&&&&& {&&&&& }&&&& }&&&& System.exit(0);&&& }&&& if(e.getSource()==controlpad.joinGameButton)&&& {&&&& String selectedUser=userpad.userList.getSelectedItem();&&&& if(selectedUser==null || selectedUser.startsWith("[inchess]") ||&&&& &&selectedUser.equals(chessClientName))&&&& {&&&&& chesspad.statusText.setText("必须先选定一个有效用户");&&&& }&&&& else&&&& {&&&&& try&&&&& {&&&&&& if(!isGameConnected)&&&&&& {&&&&&&& if(chesspad.connectServer(chesspad.host,chesspad.port))&&&&&&& {&&&&&&&& isGameConnected=&&&&&&&& isOnChess=&&&&&&&& isClient=&&&&&&&& controlpad.creatGameButton.setEnabled(false);&&&&&&&& controlpad.joinGameButton.setEnabled(false);&&&&&&&& controlpad.cancelGameButton.setEnabled(true);&&&&&&&& chesspad.chessthread.sendMessage("/joingame "+userpad.userList.getSelectedItem()+" "+chessClientName);&&&&&&& }&&&&&& }&&&&&& else&&&&&& {&&&&&&& isOnChess=&&&&&&& isClient=&&&&&&& controlpad.creatGameButton.setEnabled(false);&&&&&&& controlpad.joinGameButton.setEnabled(false);&&&&&&& controlpad.cancelGameButton.setEnabled(true);&&&&&&& chesspad.chessthread.sendMessage("/joingame "+userpad.userList.getSelectedItem()+" "+chessClientName);&&&&&& }&&&&& }&&&&& catch(Exception ee)&&&&& {&&&&&& isGameConnected=&&&&&& isOnChess=&&&&&& isClient=&&&&&& controlpad.creatGameButton.setEnabled(true);&&&&&& controlpad.joinGameButton.setEnabled(true);&&&&&& controlpad.cancelGameButton.setEnabled(false);&&&&&& chatpad.chatLineArea.setText("chesspad.connectServer无法连接 \n"+ee);&&&&& }&&&& }&&& }&&& if(e.getSource()==controlpad.creatGameButton)&&& {&&&& try&&&& {&&&&& if(!isGameConnected)&&&&& {&&&&&& if(chesspad.connectServer(chesspad.host,chesspad.port))&&&&&& {&&&&&&& isGameConnected=&&&&&&& isOnChess=&&&&&&& isServer=&&&&&&& controlpad.creatGameButton.setEnabled(false);&&&&&&& controlpad.joinGameButton.setEnabled(false);&&&&&&& controlpad.cancelGameButton.setEnabled(true);&&&&&&& chesspad.chessthread.sendMessage("/creatgame "+"[inchess]"+chessClientName);&&&&&& }&&&&& }&&&&& else&&&&& {&&&&&& isOnChess=&&&&&& isServer=&&&&&& controlpad.creatGameButton.setEnabled(false);&&&&&& controlpad.joinGameButton.setEnabled(false);&&&&&& controlpad.cancelGameButton.setEnabled(true);&&&&&& chesspad.chessthread.sendMessage("/creatgame "+"[inchess]"+chessClientName);&&&&& }&&&& }&&&& catch(Exception ec)&&&& {&&&&& isGameConnected=&&&&& isOnChess=&&&&& isServer=&&&&& controlpad.creatGameButton.setEnabled(true);&&&&& controlpad.joinGameButton.setEnabled(true);&&&&& controlpad.cancelGameButton.setEnabled(false);&&&&& ec.printStackTrace();&&&&& chatpad.chatLineArea.setText("chesspad.connectServer无法连接 \n"+ec);&&&& }&&& }&&& if(e.getSource()==controlpad.cancelGameButton)&&& {&&&&&&& if(isOnChess)&&&&&&& {&&&&& chesspad.chessthread.sendMessage("/giveup "+chessClientName);&&&&& chesspad.chessVictory(-1*chesspad.chessColor);&&&&& controlpad.creatGameButton.setEnabled(true);&&&&& controlpad.joinGameButton.setEnabled(true);&&&&& controlpad.cancelGameButton.setEnabled(false);&&&&& chesspad.statusText.setText("请建立游戏或者加入游戏");&&&& }&&&& if(!isOnChess)&&&& {&&&&& controlpad.creatGameButton.setEnabled(true);&&&&& controlpad.joinGameButton.setEnabled(true);&&&&& controlpad.cancelGameButton.setEnabled(false);&&&&& chesspad.statusText.setText("请建立游戏或者加入游戏");&&&& }&&&& isClient=isServer=&&&& }&& }&&& public void keyPressed(KeyEvent e)&& {&&& TextField inputWords=(TextField)e.getSource();&&& if(e.getKeyCode()==KeyEvent.VK_ENTER)&&& {&&&& if(inputpad.userChoice.getSelectedItem().equals("所有人"))&&&& {&&&&& try&&&&& {&&&&&& out.writeUTF(inputWords.getText());&&&&&& inputWords.setText("");&&&&& }&&&&& catch(Exception ea)&&&&& {&&&&&& chatpad.chatLineArea.setText("chessClient:KeyPressed无法连接,建议重新连接 \n");&&&&&& userpad.userList.removeAll();&&&&&& inputpad.userChoice.removeAll();&&&&&& inputWords.setText("");&&&&&& controlpad.connectButton.setEnabled(true);&&&&& }&&&& }&&&& else&&&& {&&&&& try&&&&& {&&&&&& out.writeUTF("/"+inputpad.userChoice.getSelectedItem()+" "+inputWords.getText());&&&&&& inputWords.setText("");&&&&& }&&&&& catch(Exception ea)&&&&& {&&&&&& chatpad.chatLineArea.setText("chessClient:KeyPressed无法连接,建议重新连接 \n");&&&&&& userpad.userList.removeAll();&&&&&& inputpad.userChoice.removeAll();&&&&&& inputWords.setText("");&&&&&& controlpad.connectButton.setEnabled(true);&&&&& }&&&& }&&&&& }&& }&& public void keyTyped(KeyEvent e)&& {&& }&& public void keyReleased(KeyEvent e)&& {&& }&&& public static void main(String args[])&& {&&& chessClient chessClient=new chessClient();&& }}/******************************************************************************************下面是:chessInteface.java******************************************************************************************/import java.awt.*;import java.awt.event.*;import java.io.*;import java.net.*;class userPad extends Panel{&List userList=new List(10);&userPad()&{&&setLayout(new BorderLayout());&&for(int i=0;i&50;i++)&&{&&&userList.add(i+"."+"没有用户");&&}&&add(userList,BorderLayout.CENTER);&}}class chatPad extends Panel{&TextArea chatLineArea=new TextArea("",18,30,TextArea.SCROLLBARS_VERTICAL_ONLY);&chatPad()&{&&setLayout(new BorderLayout());&&add(chatLineArea,BorderLayout.CENTER);&}}&class controlPad extends Panel{&Label IPlabel=new Label("IP",Label.LEFT);&TextField inputIP=new TextField("localhost",10);&Button connectButton=new Button("连接主机");&Button creatGameButton=new Button("建立游戏");&Button joinGameButton=new Button("加入游戏");&Button cancelGameButton=new Button("放弃游戏");&Button exitGameButton=new Button("关闭程序");&controlPad()&{&&setLayout(new FlowLayout(FlowLayout.LEFT));&&&&&&& setBackground(Color.pink);&&add(IPlabel);&&add(inputIP);&&add(connectButton);&&add(creatGameButton);&&add(joinGameButton);&&add(cancelGameButton);&&add(exitGameButton);&}}class inputPad extends Panel{&TextField inputWords=new TextField("",40);&Choice userChoice=new Choice();&inputPad()&{&&setLayout(new FlowLayout(FlowLayout.LEFT));&&for(int i=0;i&50;i++)&&{&&&userChoice.addItem(i+"."+"没有用户");&&}&&userChoice.setSize(60,24);&&add(userChoice);&&add(inputWords);&}}/**********************************************************************************************下面是:chessPad.java**********************************************************************************************/import java.awt.*;import java.awt.event.*;import java.io.*;import java.net.*;import java.util.*;class chessThread extends Thread{&chessP&chessThread(chessPad chesspad)&{&&this.chesspad=&}&public void sendMessage(String sndMessage)&{&&try&&{&&&chesspad.outData.writeUTF(sndMessage);&&}&&catch(Exception ea)&&{&&&System.out.println("chessThread.sendMessage:"+ea);&&}&}&public void acceptMessage(String recMessage)&{&&if(recMessage.startsWith("/chess "))&&{&&&StringTokenizer userToken=new StringTokenizer(recMessage," ");&&&String chessT&&&String[] chessOpt={"-1","-1","0"};&&&int chessOptNum=0;&&&while(userToken.hasMoreTokens())&&&{&&&&chessToken=(String)userToken.nextToken(" ");&&&&if(chessOptNum&=1 && chessOptNum&=3)&&&&{&&&&&chessOpt[chessOptNum-1]=chessT&&&&}&&&&chessOptNum++;&&&}&&&chesspad.netChessPaint(Integer.parseInt(chessOpt[0]),Integer.parseInt(chessOpt[1]),Integer.parseInt(chessOpt[2]));&&}&&else if(recMessage.startsWith("/yourname "))&&{&&&chesspad.chessSelfName=recMessage.substring(10);&&}&&else if(recMessage.equals("/error"))&&{&&&chesspad.statusText.setText("错误:没有这个用户,请退出程序,重新加入");&&}&&else&&{&&&//System.out.println(recMessage);&&}&}&public void run()&{&&&& String message="";&&&& try&&&& {&&&while(true)&&&{&&&&message=chesspad.inData.readUTF();&&&&acceptMessage(message);&&&}&&}&&catch(IOException es)&&{&&}&}}&class chessPad extends Panel implements MouseListener,ActionListener{&int chessPoint_x=-1,chessPoint_y=-1,chessColor=1;&int chessBlack_x[]=new int[200];&int chessBlack_y[]=new int[200];&int chessWhite_x[]=new int[200];&int chessWhite_y[]=new int[200];&int chessBlackCount=0,chessWhiteCount=0;&int chessBlackWin=0,chessWhiteWin=0;&boolean isMouseEnabled=false,isWin=false,isInGame=&TextField statusText=new TextField("请先连接服务器");&&& Socket chessS&DataInputStream inD&DataOutputStream outD&String chessSelfName=&String chessPeerName=&String host=&int port=4331;&chessThread chessthread=new chessThread(this);&&& chessPad()&&& {& setSize(440,440);&&&& setLayout(null);&&&& setBackground(Color.pink);&&&& addMouseListener(this);&&&& add(statusText);&&&& statusText.setBounds(40,5,360,24);&&&& statusText.setEditable(false);&&& }& public boolean connectServer(String ServerIP,int ServerPort) throws Exception& {&& try&& {&&& chessSocket=new Socket(ServerIP,ServerPort);&&& inData=new DataInputStream(chessSocket.getInputStream());&&& outData=new DataOutputStream(chessSocket.getOutputStream());&&&& chessthread.start();&&&&& }&& catch(IOException ex)&& {&&& statusText.setText("chessPad:connectServer:无法连接 \n");&& }&&& }&&&& public void chessVictory(int chessColorWin)&&&& {&& &this.removeAll();&&& &for(int i=0;i&=chessBlackCi++)&& &{&& &&chessBlack_x[i]=0;&&&&&&&&& chessBlack_y[i]=0;&& &}&& &for(int i=0;i&=chessWhiteCi++)&& &{&& &&chessWhite_x[i]=0;&&&&&&&&& chessWhite_y[i]=0;&& &}&& &chessBlackCount=0;&& &chessWhiteCount=0;&& &add(statusText);&& &statusText.setBounds(40,5,360,24);&&&&&&&& if(chessColorWin==1)&&&{&chessBlackWin++;&&&&statusText.setText("黑棋胜,黑:白为"+chessBlackWin+":"+chessWhiteWin+",重新开局,等待白棋下子...");&&&}&&&&& else if(chessColorWin==-1)&&&&& {&&&&chessWhiteWin++;&&&&statusText.setText("白棋胜,黑:白为"+chessBlackWin+":"+chessWhiteWin+",重新开局,等待黑棋下子...");&&&}& }&&&&& public void getLocation(int a,int b,int color)&&&& {&& if(color==1)&& {&&& chessBlack_x[chessBlackCount]=a*20;&&& chessBlack_y[chessBlackCount]=b*20;&&& chessBlackCount++;&& }&& else if(color==-1)&& {&&& chessWhite_x[chessWhiteCount]=a*20;&&& chessWhite_y[chessWhiteCount]=b*20;&&& chessWhiteCount++;&& }& }&&&& public boolean checkWin(int a,int b,int checkColor)&&&& {&& int step=1,chessLink=1,chessLinkTest=1,chessCompare=0;&& if(checkColor==1)&& {&&& chessLink=1;&&& for(step=1;step&=4;step++)&&& {&&&& for(chessCompare=0;chessCompare&=chessBlackCchessCompare++)&&&& {&&&&& if(((a+step)*20==chessBlack_x[chessCompare]) && ((b*20)==chessBlack_y[chessCompare]))&&&&& {&&&&&& chessLink=chessLink+1;&&&&&& if(chessLink==5)&&&&&& {&&&&&&& return(true);&&&&&& }&&&&& }&&&&& }&&&&& if(chessLink==(chessLinkTest+1))&&&&& chessLinkTest++;&&&&& else&&&&&&&&& }&&& for(step=1;step&=4;step++)&&& {&&&& for(chessCompare=0;chessCompare&=chessBlackCchessCompare++)&&&& {&&&&& if(((a-step)*20==chessBlack_x[chessCompare]) && (b*20==chessBlack_y[chessCompare]))&&&&& {&&&&&& chessLink++;&&&&&& if(chessLink==5)&&&&&& {&&&&&&& return(true);&&&&&& }&&&&&& }&&&&& }&&&&& if(chessLink==(chessLinkTest+1))&&&&& chessLinkTest++;&&&&& else&&&&&&&&& }&&& chessLink=1;&&& chessLinkTest=1;&&& for(step=1;step&=4;step++)&&& {&&&& for(chessCompare=0;chessCompare&=chessBlackCchessCompare++)&&&& {&&&&& if((a*20==chessBlack_x[chessCompare]) && ((b+step)*20==chessBlack_y[chessCompare]))&&&&& {&&&&&& chessLink++;&&&&&& if(chessLink==5)&&&&&& {&&&&&&& return(true);&&&&&& }&&&&&& }&&&&&&&& }&&&&&&&& if(chessLink==(chessLinkTest+1))&&&&&&&& chessLinkTest++;&&&&&&&& else&&&&&&&&&&&& }&&& for(step=1;step&=4;step++)&&& {&&&& for(chessCompare=0;chessCompare&=chessBlackCchessCompare++)&&&& {&&&&& if((a*20==chessBlack_x[chessCompare]) && ((b-step)*20==chessBlack_y[chessCompare]))&&&&& {&&&&&& chessLink++;&&&&&& if(chessLink==5)&&&&&& {&&&&&&& return(true);&&&&&& }&&&&&& }&&&&& }&&&&& if(chessLink==(chessLinkTest+1))&&&&& chessLinkTest++;&&&&& else&&&&&&&&& }&&&&& chessLink=1;&&&&& chessLinkTest=1;&&&&& for(step=1;step&=4;step++)&&&&& {&&&&&& for(chessCompare=0;chessCompare&=chessBlackCchessCompare++)&&&&&& {&&&&&&& if(((a-step)*20==chessBlack_x[chessCompare]) && ((b+step)*20==chessBlack_y[chessCompare]))&&&&&&& {&&&&&&&& chessLink++;&&&&&& if(chessLink==5)&&&&&& {&&&&&&& return(true);&&&&&&& }&&&&&&&& }&&&&&}&&&&&if(chessLink==(chessLinkTest+1))&&&&&chessLinkTest++;&&&&&else&&&&&&&&&& }&&&&& for(step=1;step&=4;step++)&&&&& {&&&&&& for(chessCompare=0;chessCompare&=chessBlackCchessCompare++)&&&&&& {&&&&&&& if(((a+step)*20==chessBlack_x[chessCompare]) && ((b-step)*20==chessBlack_y[chessCompare]))&&&&&&& {&&&&&&&& chessLink++;&&&&&& if(chessLink==5)&&&&&& {&&&&&&& return(true);&&&&&&& }&&&&&&&& }&&&&&&& }&&&&&&& if(chessLink==(chessLinkTest+1))&&&&&&& chessLinkTest++;&&&&&&& else&&&&&&&&&&&&& }&&&&& chessLink=1;&&&&& chessLinkTest=1;&&&&& for(step=1;step&=4;step++)&&&&& {&&&&&& for(chessCompare=0;chessCompare&=chessBlackCchessCompare++)&&&&&& {&&&&&&& if(((a+step)*20==chessBlack_x[chessCompare]) && ((b+step)*20==chessBlack_y[chessCompare]))&&&&&&& {&&&&&&&& chessLink++;&&&&&& if(chessLink==5)&&&&&& {&&&&&&& return(true);&&&&&&& }&&&&&&&& }&&&&&&& }&&&&&&& if(chessLink==(chessLinkTest+1))&&&&&&& chessLinkTest++;&&&&&&& else&&&&&&&&&&&& }&&&&& for(step=1;step&=4;step++)&&&&& {&&&&&& for(chessCompare=0;chessCompare&=chessBlackCchessCompare++)&&&&&& {&&&&&&& if(((a-step)*20==chessBlack_x[chessCompare]) && ((b-step)*20==chessBlack_y[chessCompare]))&&&&&&& {&&&&&&&& chessLink++;&&&&&&&& if(chessLink==5)&&&&&&&& {&&&&&&&&& return(true);&&&&&&&&& }&&&&&&}&&&&&}&&&&&&& if(chessLink==(chessLinkTest+1))&&&&&&& chessLinkTest++;&&&&&&& else&&&&&&&&&&&&& }&&&}&&&& else if(checkColor==-1)&&&& {&&& chessLink=1;&&& for(step=1;step&=4;step++)&&& {&&&& for(chessCompare=0;chessCompare&=chessWhiteCchessCompare++)&&&& {&&&&& if(((a+step)*20==chessWhite_x[chessCompare]) && (b*20==chessWhite_y[chessCompare]))&&&&& {&&&&&& chessLink++;&&&&&& if(chessLink==5)&&&&&& {&&&&&&& return(true);&&&&&& }&&&&&& }&&&&& }&&&&& if(chessLink==(chessLinkTest+1))&&&&& chessLinkTest++;&&&&& else&&&&&&&&& }&&& for(step=1;step&=4;step++)&&& {&&&& for(chessCompare=0;chessCompare&=chessWhiteCchessCompare++)&&&& {&&&&& if(((a-step)*20==chessWhite_x[chessCompare]) && (b*20==chessWhite_y[chessCompare]))&&&&& {&&&&&& chessLink++;&&&&&& if(chessLink==5)&&&&&& {&&&&&&& return(true);&&&&&& }&&&&&& }&&&&& }&&&&& if(chessLink==(chessLinkTest+1))&&&&& chessLinkTest++;&&&&& else&&&&&&&&& }&&& chessLink=1;&&& chessLinkTest=1;&&& for(step=1;step&=4;step++)&&& {&&&& for(chessCompare=0;chessCompare&=chessWhiteCchessCompare++)&&&& {&&&&& if((a*20==chessWhite_x[chessCompare]) && ((b+step)*20==chessWhite_y[chessCompare]))&&&&& {&&&&&& chessLink++;&&&&&& if(chessLink==5)&&&&&& {&&&&&&& return(true);&&&&&& }&&&&&& }&&&&& }&&&&& if(chessLink==(chessLinkTest+1))&&&&& chessLinkTest++;&&&&& else&&&&&&&&& }&&& for(step=1;step&=4;step++)&&& {&&&& for(chessCompare=0;chessCompare&=chessWhiteCchessCompare++)&&&& {&&&&& if((a*20==chessWhite_x[chessCompare]) && ((b-step)*20==chessWhite_y[chessCompare]))&&&&& {&&&&&& chessLink++;&&&&&& if(chessLink==5)&&&&&& {&&&&&&& return(true);&&&&&& }&&&&&& }&&&&& }&&&&& if(chessLink==(chessLinkTest+1))&&&&& chessLinkTest++;&&&&& else&&&&&&&&&& }&&&&& chessLink=1;&&&&& chessLinkTest=1;&&&&& for(step=1;step&=4;step++)&&&&& {&&&&&& for(chessCompare=0;chessCompare&=chessWhiteCchessCompare++)&&&&&& {&&&&&&& if(((a-step)*20==chessWhite_x[chessCompare]) && ((b+step)*20==chessWhite_y[chessCompare]))&&&&&&& {&&&&&&&& chessLink++;&&&&&& if(chessLink==5)&&&&&& {&&&&&&& return(true);&&&&&& }&&&&&& }&&&&& }&&&&& if(chessLink==(chessLinkTest+1))&&&&& chessLinkTest++;&&&&& else&&&&&&&&&& }&&&&& for(step=1;step&=4;step++)&&&&& {&&&&&& for(chessCompare=0;chessCompare&=chessWhiteCchessCompare++)&&&&&& {&&&&&&& if(((a+step)*20==chessWhite_x[chessCompare]) && ((b-step)*20==chessWhite_y[chessCompare]))&&&&&&& {&&&&&&&& chessLink++;&&&&&&&& if(chessLink==5)&&&&&&&& {&&&&&&&&& return(true);&&&&&&&}&&&&&&&& }&&&&&&& }&&&&&&& if(chessLink==(chessLinkTest+1))&&&&&&& chessLinkTest++;&&&&&&& else&&&&&&&&&&&& }&&&&& chessLink=1;&&&&& chessLinkTest=1;&&&&& for(step=1;step&=4;step++)&&&&& {&&&&&& for(chessCompare=0;chessCompare&=chessWhiteCchessCompare++)&&&&&& {&&&&&&& if(((a+step)*20==chessWhite_x[chessCompare]) && ((b+step)*20==chessWhite_y[chessCompare]))&&&&&&& {&&&&&&&& chessLink++;&&&&&&&& if(chessLink==5)&&&&&&&& {&&&&&&&&& return(true);&&&&&&&&& }&&&&&& }&&&&& }&&&&& if(chessLink==(chessLinkTest+1))&&&&& chessLinkTest++;&&&&& else&&&&&&&&&& }&&&&& for(step=1;step&=4;step++)&&&&& {&&&&&& for(chessCompare=0;chessCompare&=chessWhiteCchessCompare++)&&&&&& {&&&&&&& if(((a-step)*20==chessWhite_x[chessCompare]) && ((b-step)*20==chessWhite_y[chessCompare]))&&&&&&& {&&&&&&&& chessLink++;&&&&&&&& if(chessLink==5)&&&&&&&& {&&&&&&&&& return(true);&&&&&&&&& }&&&&&&&& }&&&&& }&&&&& if(chessLink==(chessLinkTest+1))&&&&& chessLinkTest++;&&&&& else&&&&&&&&&& }&&&& }&&&&&&&&&& return(false);&&& }&&&&&& public void paint(Graphics g)&&&& {&& for (int i=40;i&=380;i=i+20)&&&&& {&&& g.drawLine(40,i,400,i);&& }&& g.drawLine(40,400,400,400);&&&&&&&& for(int j=40;j&=380;j=j+20)&&&&&&&& {&&& g.drawLine(j,40,j,400);&& }&&&&&&&& g.drawLine(400,40,400,400);&&&&&&&& g.fillOval(97,97,6,6);&&&&&&&& g.fillOval(337,97,6,6);&&&&&&&& g.fillOval(97,337,6,6);&&&&&&&& g.fillOval(337,337,6,6);&&&&&&&& g.fillOval(217,217,6,6);&&&&& }&&&&& public void chessPaint(int chessPoint_a,int chessPoint_b,int color)&&&&& {&&& chessPoint_black chesspoint_black=new chessPoint_black(this);&&& chessPoint_white chesspoint_white=new chessPoint_white(this);&&& if(color==1 && isMouseEnabled)&&& {&&&& getLocation(chessPoint_a,chessPoint_b,color);&&&& isWin=checkWin(chessPoint_a,chessPoint_b,color);&&&& if(isWin==false)&&&& {&&&&& chessthread.sendMessage("/"+chessPeerName+" /chess "+chessPoint_a+" "+chessPoint_b+" "+color);&&&&& this.add(chesspoint_black);&&&&& chesspoint_black.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16);&&&&& statusText.setText("黑(第"+chessBlackCount+"步)"+chessPoint_a+" "+chessPoint_b+",请白棋下子");&&&&& isMouseEnabled=&&&& }&&&& else&&&& {&&&&& chessthread.sendMessage("/"+chessPeerName+" /chess "+chessPoint_a+" "+chessPoint_b+" "+color);&&&&& this.add(chesspoint_black);&&&&& chesspoint_black.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16);&&&&& chessVictory(1);&&&&& isMouseEnabled=&&&& }&&& }&&& else if(color==-1 && isMouseEnabled)&&& {&&&& getLocation(chessPoint_a,chessPoint_b,color);&&&& isWin=checkWin(chessPoint_a,chessPoint_b,color);&&&& if(isWin==false)&&&& {&&&&& chessthread.sendMessage("/"+chessPeerName+" /chess "+chessPoint_a+" "+chessPoint_b+" "+color);&&&&& this.add(chesspoint_white);&&&&& chesspoint_white.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16);&&&&& statusText.setText("白(第"+chessWhiteCount+"步)"+chessPoint_a+" "+chessPoint_b+",请黑棋下子");&&&&& isMouseEnabled=&&&& }&&&& else&&&& {&&&&& chessthread.sendMessage("/"+chessPeerName+" /chess "+chessPoint_a+" "+chessPoint_b+" "+color);&&&&& this.add(chesspoint_white);&&&&& chesspoint_white.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16);&&&&& chessVictory(-1);&&&&& isMouseEnabled=&&&& }&&& }&& }&&&&& public void netChessPaint(int chessPoint_a,int chessPoint_b,int color)&&&&& {&&& chessPoint_black chesspoint_black=new chessPoint_black(this);&&& chessPoint_white chesspoint_white=new chessPoint_white(this);&&& getLocation(chessPoint_a,chessPoint_b,color);&&& if(color==1)&&& {&&&& isWin=checkWin(chessPoint_a,chessPoint_b,color);&&&& if(isWin==false)&&&& {&&&&& this.add(chesspoint_black);&&&&& chesspoint_black.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16);&&&&& statusText.setText("黑(第"+chessBlackCount+"步)"+chessPoint_a+" "+chessPoint_b+",请白棋下子");&&&&& isMouseEnabled=&&&& }&&&& else&&&& {&&&&& this.add(chesspoint_black);&&&&& chesspoint_black.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16);&&&&& chessVictory(1);&&&&& isMouseEnabled=&&&& }&&& }&&& else if(color==-1)&&& {&&&& isWin=checkWin(chessPoint_a,chessPoint_b,color);&&&& if(isWin==false)&&&& {&&&&& this.add(chesspoint_white);&&&&& chesspoint_white.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16);&&&&& statusText.setText("白(第"+chessWhiteCount+"步)"+chessPoint_a+" "+chessPoint_b+",请黑棋下子");&&&&& isMouseEnabled=&&&& }&&&& else&&&& {&&&&& chessthread.sendMessage("/"+chessPeerName+" /victory "+color);&&&&& this.add(chesspoint_white);&&&&& chesspoint_white.setBounds(chessPoint_a*20-7,chessPoint_b*20-7,16,16);&&&&& chessVictory(-1);&&&&& isMouseEnabled=&&&& }&&& }&& }&&&&& public void mousePressed(MouseEvent e)&&&&& {&&& if (e.getModifiers()==InputEvent.BUTTON1_MASK)&&& {&&&& chessPoint_x=(int)e.getX();&&&& chessPoint_y=(int)e.getY();&&&& int a=(chessPoint_x+10)/20,b=(chessPoint_y+10)/20;&&&& if(chessPoint_x/20&2||chessPoint_y/20&2||chessPoint_x/20&19||chessPoint_y/20&19)&&&& {}&&&& else&&&& {&&&&& chessPaint(a,b,chessColor);&&&& }&&&}&&}&&public void mouseReleased(MouseEvent e){}&&public void mouseEntered(MouseEvent e) {}&&public void mouseExited(MouseEvent e) {}&&public void mouseClicked(MouseEvent e) {}&&public void actionPerformed(ActionEvent e)&&{&&}}class chessPoint_black extends Canvas implements MouseListener{&chessPad chesspad=&chessPoint_black(chessPad p)&{&&setSize(20,20);&&chesspad=p;&&addMouseListener(this);&}&public void paint(Graphics g)&{&&g.setColor(Color.black);&&g.fillOval(0,0,14,14);&}&public void mousePressed(MouseEvent e)&{//&&if(e.getModifiers()==InputEvent.BUTTON3_MASK)//&&{//&&&chesspad.remove(this);//&&&chesspad.chessColor=1;//&&&chesspad.text_2.setText("");//&&&chesspad.text_1.setText("请黑棋下子");//&&}&}&public void mouseReleased(MouseEvent e){}&public void mouseEntered(MouseEvent e) {}&public void mouseExited(MouseEvent e) {}&public void mouseClicked(MouseEvent e) {}}class chessPoint_white extends Canvas implements MouseListener{&chessPad chesspad=&chessPoint_white(chessPad p)&{&&setSize(20,20);&&addMouseListener(this);&&chesspad=p;&}&public void paint(Graphics g)&{&&g.setColor(Color.white);&&g.fillOval(0,0,14,14);&}&public void mousePressed(MouseEvent e)&{//&&if(e.getModifiers()==InputEvent.BUTTON3_MASK)//&&{//&&&chesspad.remove(this);//&&&chesspad.chessColor=-1;//&&&chesspad.text_2.setText("请白旗下子");//&&&chesspad.text_1.setText("");//&&}&}&public void mouseReleased(MouseEvent e){}&public void mouseEntered(MouseEvent e) {}&public void mouseExited(MouseEvent e) {}&public void mouseClicked(MouseEvent e)&{//&&if(e.getClickCount()&=2)//&&chesspad.remove(this);&}}/******************************************************************************************最后是:chessServer.java*******************************************************************************************/import java.io.*;import java.net.*;import java.awt.*;import java.util.*;import java.awt.event.*;class MessageServer extends Panel //implements ActionListener{&TextArea messageBoard=new TextArea("",22,50,TextArea.SCROLLBARS_VERTICAL_ONLY);&Label statusLabel=new Label("当前连接数:",Label.LEFT);&&& Panel boardPanel=new Panel();&&& Panel statusPanel=new Panel();&MessageServer()&{&&setSize(350,300);&&setBackground(Color.pink);&&setLayout(new BorderLayout());&&boardPanel.setLayout(new FlowLayout());&&boardPanel.setSize(210,210);&&statusPanel.setLayout(new BorderLayout());&&statusPanel.setSize(210,50);&&boardPanel.add(messageBoard);&&&& statusPanel.add(statusLabel,BorderLayout.WEST);&&add(boardPanel,BorderLayout.CENTER);&&add(statusPanel,BorderLayout.NORTH);&}}class ServerThread extends Thread{&Socket clientS&Hashtable clientDataH&Hashtable clientNameH&Hashtable chessPeerH&MessageS&boolean isClientClosed=&ServerThread(Socket clientSocket,Hashtable clientDataHash,Hashtable clientNameHash,Hashtable chessPeerHash,MessageServer server)&{&&this.clientSocket=clientS&&this.clientDataHash=clientDataH&&this.clientNameHash=clientNameH&&this.chessPeerHash=chessPeerH&&this.server=&}&&public void messageTransfer(String message)&{&&String clientName,peerN&&if(message.startsWith("/"))&&{&&&if(message.startsWith("/changename "))&&&{&&&&clientName=message.substring(12);&&&&if( clientName.length()&=0&&&&&&&&&&&& || clientName.length()&20&&&&&&&&&&&&&&&&&& ||&&&&&clientName.startsWith("/")&&&&&&&& || clientNameHash.containsValue(clientName) ||&&&&&&& clientName.startsWith("changename")|| clientName.startsWith("list")&&&&&&&&&&& ||&&&&&&& clientName.startsWith("[inchess]") || clientName.startsWith("creatgame")&&&&&& ||&&&&&&& clientName.startsWith("joingame")& || clientName.startsWith("yourname")&&&&&&& ||&&&&&&& clientName.startsWith("userlist")& || clientName.startsWith("chess")&&&&&&&&&& ||&&&&&&& clientName.startsWith("OK")&&&&&&& || clientName.startsWith("reject")&&&&&&&&& ||&&&&&&& clientName.startsWith("peer")&&&&& || clientName.startsWith("peername")&&&&&&& ||&&&&&&& clientName.startsWith("giveup")&&& || clientName.startsWith("youwin")&&&&&&&&& ||&&&&&&& clientName.startsWith("所有人"))&&&&{&&&&&message="无效命令";&&&&&Feedback(message);&&&&}&&&&else&&&&{&&&&&if(clientNameHash.containsValue(("[inchess]"+(String)clientNameHash.get(clientSocket))))&&&&&{&&&&&&synchronized(clientNameHash)&&&&&&{&&&&&&&clientNameHash.put((Socket)getHashKey(clientNameHash,("[inchess]"+clientNameHash.get(clientSocket))),&&&&&&&&&&&&("[inchess]"+clientName));&&&&&&&chessPeerTalk(("[inchess]"+clientName),("/yourname "+("[inchess]"+clientName)));&&&&&&}&&&&&}&&&&&else if(chessPeerHash.containsKey(clientNameHash.get(clientSocket)))&&&&&{&&&&&&//游戏客户端改名字&&&&&&synchronized(clientNameHash)&&&&&&{&&&&&&&clientNameHash.put((Socket)getHashKey(clientNameHash,("[inchess]"+clientNameHash.get(clientSocket))),&&&&&&&&&&&&("[inchess]"+clientName));&&&&&&}&&&&&&synchronized(chessPeerHash)&&&&&&{&&&&&&&//chessPeerHash添加新名字映射&&&&&&&chessPeerHash.put(clientName,chessPeerHash.get(clientNameHash.get(clientSocket)));&&&&&&&//chessPeerHash删除旧映射&&&&&&&chessPeerHash.remove(clientNameHash.get(clientSocket));&&&&&&}&&&&&&//向游戏客户端发送新名字&&&&&&chessPeerTalk(("[inchess]"+clientName),("/yourname "+("[inchess]"+clientName)));&&&&&&//向peer游戏客户端发送&&&&&&chessPeerTalk((String)chessPeerHash.get(clientName),("/peer "+"[inchess]"+clientName));&&&&&}&&&&&else if(chessPeerHash.containsValue(clientNameHash.get(clientSocket)))&&&&&{&&&&&&synchronized(clientNameHash)&&&&&&{&&&&&&&//游戏客户端改名字&&&&&&&clientNameHash.put((Socket)getHashKey(clientNameHash,("[inchess]"+clientNameHash.get(clientSocket))),&&&&&&&&&&&&&&&&&&("[inchess]"+clientName));&&&&&&}&&&&&&synchronized(chessPeerHash)&&&&&&{&&&&&&&//chessPeerHash重新映射&&&&&&&chessPeerHash.put((String)getHashKey(chessPeerHash,clientNameHash.get(clientSocket)),clientName);&&&&&&&//向游戏客户端发送新名字&&&&&&&chessPeerTalk(("[inchess]"+clientName),("/yourname "+("[inchess]"+clientName)));&&&&&&}&&&&&&//向peer游戏客户端发送&&&&&&chessPeerTalk((String)getHashKey(chessPeerHash,clientName),("/peer "+"[inchess]"+clientName));&&&&&}&&&&&message=clientNameHash.get(clientSocket)+"改名为:"+clientN&&&&&synchronized(clientNameHash)&&&&&{&&&&&&clientNameHash.put(clientSocket,clientName);&&&&&}&&&&&publicTalk(message);&&&&&Feedback("/yourname "+(String)clientNameHash.get(clientSocket));&&&&&publicTalk(getUserList());&&&&}&&&}&&&else if(message.equals("/list"))&&&{&&&&Feedback(getUserList());&&&&&&&& &}&&&&&&&& &else if(message.startsWith("/creatgame [inchess]"))&&&&&&&& &{&&&&String chessServerName=message.substring(20);&&&&synchronized(clientNameHash)&&&&{&&&&&clientNameHash.put(clientSocket,message.substring(11));&&&&}&&&&synchronized(chessPeerHash)&&&&{&&&&&chessPeerHash.put(chessServerName,"wait");&&&&}&&&&Feedback("/yourname "+clientNameHash.get(clientSocket));&&&&chessPeerTalk(chessServerName,"/OK");&&&&publicTalk(getUserList());&&&}&&&else if(message.startsWith("/joingame "))&&&{&&&&StringTokenizer userToken=new StringTokenizer(message," ");&&&&String getUserToken,serverName,selfN&&&&String[] chessNameOpt={"0","0"};&&&&int getOptNum=0;&&&&while(userToken.hasMoreTokens())&&&&{&&&&&getUserToken=(String)userToken.nextToken(" ");&&&&&if(getOptNum&=1 && getOptNum&=2)&&&&&{&&&&&&chessNameOpt[getOptNum-1]=getUserT&&&&&}&&&&&getOptNum++;&&&&}&&&&serverName=chessNameOpt[0];&&&&selfName=chessNameOpt[1];&&&&if(chessPeerHash.containsKey(serverName) && chessPeerHash.get(serverName).equals("wait"))&&&&{&&&&&synchronized(clientNameHash)&&&&&{&&&&&&clientNameHash.put(clientSocket,("[inchess]"+selfName));&&&&&}&&&&&synchronized(chessPeerHash)&&&&&{&&&&&&chessPeerHash.put(serverName,selfName);&&&&&}&&&&&publicTalk(getUserList());&&&&&chessPeerTalk(selfName,("/peer "+"[inchess]"+serverName));&&&&&chessPeerTalk(serverName,("/peer "+"[inchess]"+selfName));&&&&}&&&&else&&&&{&&&&&chessPeerTalk(selfName,"/reject");&&&&&try&&&&&{&&&&&&clientClose();&&&&&}&&&&&catch(Exception ez)&&&&&{&&&&&}&&&&}&&&}&&&else if(message.startsWith("/[inchess]"))&&&{&&&&int firstLocation=0,lastL&&&&&&&&&&&&&&& lastLocation=message.indexOf(" ",0);&&&&peerName=message.substring((firstLocation+1),lastLocation);&&&&&& message=message.substring((lastLocation+1));&&&&if(chessPeerTalk(peerName,message))&&&&{&&&&&Feedback("/error");&&&&}&&&}&&&else if(message.startsWith("/giveup "))&&&{&&&&String chessClientName=message.substring(8);&&&&if(chessPeerHash.containsKey(chessClientName) && !((String)chessPeerHash.get(chessClientName)).equals("wait"))&&&&{&&&&&chessPeerTalk((String)chessPeerHash.get(chessClientName),"/youwin");&&&&&synchronized(chessPeerHash)&&&&&{&&&&&&chessPeerHash.remove(chessClientName);&&&&&}&&&&}&&&&if(chessPeerHash.containsValue(chessClientName))&&&&{&&&&&chessPeerTalk((String)getHashKey(chessPeerHash,chessClientName),"/youwin");&&&&&synchronized(chessPeerHash)&&&&&{&&&&&&chessPeerHash.remove((String)getHashKey(chessPeerHash,chessClientName));&&&&&}&&&&}&&&}&&&else&&&{&&&&int firstLocation=0,lastL&&&&&&&&&&&&&&& lastLocation=message.indexOf(" ",0);&&&&if(lastLocation==-1)&&&&{&&&&&Feedback("无效命令");&&&&&&&&&}&&&&else&&&&{&&&&&peerName=message.substring((firstLocation+1),lastLocation);&&&&&message=message.substring((lastLocation+1));&&&&&message=(String)clientNameHash.get(clientSocket)+"&"+&&&&&if(peerTalk(peerName,message))&&&&&{&&&&&&Feedback("没有这个用户:"+peerName+"\n");&&&&&}&&&&}&&&&&&&&&&& }&&}&&else&&{&&&message=clientNameHash.get(clientSocket)+"&"+&&&server.messageBoard.append(message+"\n");&&&publicTalk(message);&&&server.messageBoard.setCaretPosition(server.messageBoard.getText().length());&&}&&}&public void publicTalk(String publicTalkMessage)&{&&synchronized(clientDataHash)&&{&&&for(Enumeration enu=clientDataHash.elements();enu.hasMoreElements();)&&&{&&&&DataOutputStream outData=(DataOutputStream)enu.nextElement();&&&&try&&&&{&&&&&outData.writeUTF(publicTalkMessage);&&&&}&&&&catch(IOException es)&&&&{&&&&&es.printStackTrace();&&&&}&&&}&&}&}&&&& public boolean peerTalk(String peerTalk,String talkMessage)&&& {&&&&&&& for(Enumeration enu=clientDataHash.keys();enu.hasMoreElements();)&&&&&&& {&&&Socket userClient=(Socket)enu.nextElement();&&&&&&&&&&& if(peerTalk.equals((String)clientNameHash.get(userClient)) && !peerTalk.equals((String)clientNameHash.get(clientSocket)))&&&&&&&&&&& {&&&&&&&&&&&&&&& synchronized(clientDataHash)&&&&&&&&&&&&&&& {&&&&&DataOutputStream peerOutData=(DataOutputStream)clientDataHash.get(userClient);&&&&&try&&&&&{&&&&&&peerOutData.writeUTF(talkMessage);&&&&&}&&&&&catch(IOException es)&&&&&{&&&&&&es.printStackTrace();&&&&&}&&&&}&&&&Feedback(talkMessage);&&&&return(false);&&&&&& }&&&&&& else if(peerTalk.equals((String)clientNameHash.get(clientSocket)))&&&&&& {&&&&Feedback(talkMessage);&&&&return(false);&&& }&&&&& }&&&&& return(true);&&& }&&& public boolean chessPeerTalk(String chessPeerTalk,String chessTalkMessage)&&& {&&&&&&& for(Enumeration enu=clientDataHash.keys();enu.hasMoreElements();)&&&&&&& {&&&Socket userClient=(Socket)enu.nextElement();&&&&&&&&&&& if(chessPeerTalk.equals((String)clientNameHash.get(userClient)) && !chessPeerTalk.equals((String)clientNameHash.get(clientSocket)))&&&&&&&&&&& {&&&&&&&&&&&&&&& synchronized(clientDataHash)&&&&&&&&&&&&&&& {&&&&&DataOutputStream peerOutData=(DataOutputStream)clientDataHash.get(userClient);&&&&&try&&&&&{&&&&&&peerOutData.writeUTF(chessTalkMessage);&&&&&}&&&&&catch(IOException es)&&&&&{&&&&&&es.printStackTrace();&&&&&}&&&&}&&&&return(false);&&&&&& }&& }&&&&& return(true);&&& }&&& public void Feedback(String feedbackString)&&& {&&synchronized(clientDataHash)&&{&&&DataOutputStream outData=(DataOutputStream)clientDataHash.get(clientSocket);&&&try&&&{&&&&outData.writeUTF(feedbackString);&&&}&&&catch(Exception eb)&&&{&&&&eb.printStackTrace();&&&}&&}&}&&&& public String getUserList()&&& {&&String userList="/userlist";&&for(Enumeration enu=clientNameHash.elements();enu.hasMoreElements();)&&{&&&userList=userList+" "+(String)enu.nextElement();&&}&&return(userList);&}&public Object getHashKey(Hashtable targetHash,Object hashValue)&{&&Object hashK&&for(Enumeration enu=targetHash.keys();enu.hasMoreElements();)&&{&&&hashKey=(Object)enu.nextElement();&&&if(hashValue.equals((Object)targetHash.get(hashKey)))&&&&return(hashKey);&&&& }&&&& return(null);&}&public void firstCome()&{&&publicTalk(getUserList());&&Feedback("/yourname "+(String)clientNameHash.get(clientSocket));&&Feedback("Java五子棋聊天客户端");&&Feedback("/changename &你的名字&& --更改名字");&&Feedback("/list --更新用户列表");&&Feedback("/&用户名& &要说的话&& --私聊");&&Feedback("注意:用命令的时候,先把谈话的对象定为所有人");&}&&public void clientClose()&{&&server.messageBoard.append("用户断开:"+clientSocket+"\n");&&//如果是游戏客户端主机&&synchronized(chessPeerHash)&&{&&&if(chessPeerHash.containsKey(clientNameHash.get(clientSocket)))&&&{&&&&chessPeerHash.remove((String)clientNameHash.get(clientSocket));&&&}&&&if(chessPeerHash.containsValue(clientNameHash.get(clientSocket)))&&&{&&&&chessPeerHash.put((String)getHashKey(chessPeerHash,(String)clientNameHash.get(clientSocket)),"tobeclosed");&&&}&&}&&synchronized(clientDataHash)&&{&&&clientDataHash.remove(clientSocket);&&}&&synchronized(clientNameHash)&&{&&&clientNameHash.remove(clientSocket);&&}&&publicTalk(getUserList());&&server.statusLabel.setText("当前连接数:"+clientDataHash.size());&&try&&{&&&clientSocket.close();&&}&&catch(IOException exx)&&{&&}&&isClientClosed=&}&public void run()&{&&DataInputStream inD&&&&&&& synchronized(clientDataHash)&&&&&&& {&&&server.statusLabel.setText("当前连接数:"+clientDataHash.size());&&}&&try&&{&&&inData=new DataInputStream(clientSocket.getInputStream());&&&&&&&&&&& firstCome();&&&while(true)&&&{&&&&String message=inData.readUTF();&&&&messageTransfer(message);&&&}&&}&&catch(IOException esx)&&{&&}&&finally&&{&&&if(!isClientClosed)&&&{&&&&clientClose();&&&}&&}&}}&&public class chessServer extends Frame implements ActionListener{&Button messageClearButton=new Button("清除显示");&Button serverStatusButton=new Button("服务器状态");&Button serverOffButton=new Button("关闭服务器");&Panel buttonPanel=new Panel();&MessageServer server=new MessageServer();&ServerSocket serverS&&& Hashtable clientDataHash=new Hashtable(50);&&& Hashtable clientNameHash=new Hashtable(50);&&& Hashtable chessPeerHash=new Hashtable(50);&chessServer()&{&&super("Java五子棋服务器");&&setBackground(Color.pink);&&buttonPanel.setLayout(new FlowLayout());&&messageClearButton.setSize(60,25);&&buttonPanel.add(messageClearButton);&&messageClearButton.addActionListener(this);&&serverStatusButton.setSize(75,25);&&buttonPanel.add(serverStatusButton);&&serverStatusButton.addActionListener(this);&&serverOffButton.setSize(75,25);&&&& buttonPanel.add(serverOffButton);&&&& serverOffButton.addActionListener(this);&&add(server,BorderLayout.CENTER);&&add(buttonPanel,BorderLayout.SOUTH);&&addWindowListener(new WindowAdapter()&&{&&&public void windowClosing(WindowEvent e)&&&{&&&&System.exit(0);&&&}&&});&&pack();&&setVisible(true);&&setSize(400,450);&&setResizable(false);&&validate();&&try&&{&&&makeMessageServer(4331,server);&&}&&catch(Exception e)&&{&&&System.out.println("e");&&}&}&public void makeMessageServer(int port,MessageServer server) throws IOException&{&&Socket clientS&&long clientAccessNumber=1;&&this.server=&&try&&{&&&serverSocket=new ServerSocket(port);&&&server.messageBoard.setText("服务器开始于:"+serverSocket.getInetAddress().getLocalHost()+":"+serverSocket.getLocalPort()+"\n");&&&while(true)&&&{&&&&clientSocket=serverSocket.accept();& &&&&&& server.messageBoard.append("用户连接:"+clientSocket+"\n");&&&&DataOutputStream outData=new DataOutputStream(clientSocket.getOutputStream());&&&&clientDataHash.put(clientSocket,outData);&&&&clientNameHash.put(clientSocket,("新来客"+clientAccessNumber++));&&&&ServerThread thread=new ServerThread(clientSocket,clientDataHash,clientNameHash,chessPeerHash,server);&&&&thread.start();&&&}&&}&&catch(IOException ex)&&{&&&System.out.println("已经有服务器在运行. \n");&&}}&public void actionPerformed(ActionEvent e)&{&&if(e.getSource()==messageClearButton)&&{&&&server.messageBoard.setText("");&&}&&if(e.getSource()==serverStatusButton)&&{&&&try&&&{&&&&server.messageBoard.append("服务器信息:"+serverSocket.getInetAddress().getLocalHost()+":"+serverSocket.getLocalPort()+"\n");&&&&& }&&&&& catch(Exception ee)&&&&& {&&&&System.out.println("serverSocket.getInetAddress().getLocalHost() error \n");&&&}&&}&&if(e.getSource()==serverOffButton)&&{&&&System.exit(0);&&}&}&public static void main(String args[])&{&&chessServer chessServer=new chessServer();&}}&&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
Copyright &
All Rights Reserved

我要回帖

更多关于 软件产品功能设计 的文章

 

随机推荐