网络版五子棋的java源代码

上传人:wt****50 文档编号:46514169 上传时间:2018-06-27 格式:PDF 页数:45 大小:204.98KB
返回 下载 相关 举报
网络版五子棋的java源代码_第1页
第1页 / 共45页
网络版五子棋的java源代码_第2页
第2页 / 共45页
网络版五子棋的java源代码_第3页
第3页 / 共45页
网络版五子棋的java源代码_第4页
第4页 / 共45页
网络版五子棋的java源代码_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《网络版五子棋的java源代码》由会员分享,可在线阅读,更多相关《网络版五子棋的java源代码(45页珍藏版)》请在金锄头文库上搜索。

1、服务器端源代码: package org.shan.server;import java.awt.BorderLayout; import java.awt.Color;import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Label;import java.awt.Panel; import java.awt.TextArea; import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import java.awt.event

2、.WindowAdapter; import java.awt.event.WindowEvent;import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException;import .ServerSocket; import .Socket; import java.util.Enumeration;import java.util.Hashtable; import java.util.StringTokenizer;import javax.swing.JButton; im

3、port javax.swing.JLabel; import javax.swing.JPanel;import javax.swing.UIManager;import org.jvnet.substance.SubstanceLookAndFeel;import org.jvnet.substance.skin.SubstanceOfficeBlue2007LookAndFeel;/* 显示服务器及用户信息的 Panel 类 */ class MessageServerPanel extends Panel TextArea messageBoard = new TextArea(“,

4、22, 50, TextArea.SCROLLBARS_VERTICAL_ONLY);JLabel statusLabel = new JLabel(“当前连接数:“, Label.LEFT);JPanel boardPanel = new JPanel();/ 主显示区 PanelJPanel statusPanel = new JPanel();/ 连接状态 PanelMessageServerPanel() setSize(350, 300);setBackground(new Color(204, 204, 204); setLayout(new BorderLayout(); boa

5、rdPanel.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); /* * 服务器线程

6、,主要用于服务器与客户端的通信*/ class ServerThread extends Thread Socket clientSocket;Hashtable clientDataHash;/ Socket 与发送数据的流的映射Hashtable clientNameHash;/ Socket 与用户名的映射Hashtable chessPeerHash;/ 对弈的两个客户端用户名的映射MessageServerPanel server;boolean isClientClosed = false;/* 服务器端线程的构造函数,用于初始化一些对象。 */ ServerThread(Sock

7、et clientSocket, Hashtable clientDataHash,Hashtable clientNameHash, Hashtable chessPeerHash, MessageServerPanel server) this.clientSocket = clientSocket;this.clientDataHash = clientDataHash; this.clientNameHash = clientNameHash; this.chessPeerHash = chessPeerHash;this.server = server; /* * 对客户端发来的消息

8、处理的函数, 处理后转发回客户端。 处理消息的过程比较复杂,要针对很多种情况分别处理。 */ public void messageTransfer(String message) String clientName, peerName; / 如果消息以“/”开头,表明是命令消息。 if (message.startsWith(“/“) / 消息以“/changename”开头的几种情况. if (message.startsWith(“/r“) / 获取修改后的用户名clientName = message.substring(2); if (clientName.length() 20|c

9、lientName.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

10、“)|clientName.startsWith(“chess“)|clientName.startsWith(“OK“)|clientName.startsWith(“reject“)|clientName.startsWith(“peer“)|clientName.startsWith(“peername“)|clientName.startsWith(“giveup“)|clientName.startsWith(“youwin“)|clientName.startsWith(“所有人“) / 如果名字不合规则,则向客户端发送信息“无效命令” 。 message =“无效命令“;Feed

11、back(message); else if (clientNameHash.containsValue(“inchess“ + (String) clientNameHash .get(clientSocket) / 如果用户正在对弈中,则直接修改 Socket 和名字的映射 Hash表。 synchronized (clientNameHash) clientNameHash.put(Socket) getHashKey(clientNameHash, (“inchess“ + clientNameHash .get(clientSocket),(“inchess“ + clientNam

12、e); chessPeerTalk(“inchess“ + clientName),(“/yourname“+ (“inchess“ + clientName); / 如果用户在对弈双方的客户端,做如下处理。 else if (chessPeerHash.containsKey(clientNameHash .get(clientSocket) / 将客户端的新名字映射到 clientNameHash synchronized (clientNameHash) clientNameHash.put(Socket) getHashKey(clientNameHash, (“inchess“ +

13、clientNameHash .get(clientSocket),(“inchess“ + clientName); synchronized (chessPeerHash) / chessPeerHash 添加新名字映射 chessPeerHash.put(clientName, chessPeerHash.get(clientNameHash.get(clientSocket); / chessPeerHash 删除旧映射 chessPeerHash.remove(clientNameHash.get(clientSocket); / 向游戏客户端发送新名字chessPeerTalk(“

14、inchess“ + clientName), (“/yourname“+ (“inchess“ + clientName); / 向 peer 游戏客户端发送chessPeerTalk(String) chessPeerHash.get(clientName), (“/peer“+ “inchess“ + clientName); / 如果用户在对弈双方的服务端,做如下处理。 else if (chessPeerHash.containsValue(clientNameHash.get(clientSocket) synchronized (clientNameHash) / 游戏客户端改名

15、字clientNameHash.put(Socket) getHashKey( clientNameHash, (“inchess“ + clientNameHash.get(clientSocket), (“inchess“ + clientName); synchronized (chessPeerHash) / chessPeerHash 重新映射chessPeerHash.put(String) getHashKey( chessPeerHash, clientNameHash .get(clientSocket), clientName);/ 向游戏客户端发送新名字 chessPee

16、rTalk(“inchess“ + clientName), (“/yourname“+ (“inchess“ + clientName); / 向 peer 游戏客户端发送 chessPeerTalk(String) getHashKey(chessPeerHash,clientName), (“/peer“+ “inchess“ + clientName); / 将改名消息封装好以备发送 message = clientNameHash.get(clientSocket) +“改名为:“+ clientName; synchronized (clientNameHash) clientNameHash.put(cl

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号