Java source code Gobang network (b)
Java source code Gobang network (b)
[Source: CSDN hits: 707 Author: NA]
/************************************************* Attachments
Finally: 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 ( "current link:" 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 clientSocket;
Hashtable clientDataHash;
Hashtable clientNameHash;
Hashtable chessPeerHash;
MessageServer server;
Boolean isClientClosed = false;
ServerThread (Socket clientSocket, Hashtable clientDataHash, Hashtable clientNameHash, Hashtable chessPeerHash, MessageServer server)
(
This.clientSocket = clientSocket;
This.clientDataHash = clientDataHash;
This.clientNameHash = clientNameHash;
This.chessPeerHash = chessPeerHash;
This.server = server;
)
Public void messageTransfer (String message)
(
String clientName, peerName;
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 (the "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 ( "all"))
(
Message = "null and void order";
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)))
(
/ / Client to name game
Synchronized (clientNameHash)
(
ClientNameHash.put ((Socket) getHashKey (clientNameHash, ( "[inchess]" + clientNameHash.get (clientSocket))),
( "[Inchess]" + clientName));
)
Synchronized (chessPeerHash)
(
/ / Add a new name mapping chessPeerHash
ChessPeerHash.put (clientName, chessPeerHash.get (clientNameHash.get (clientSocket)));
/ / Delete the old mapping chessPeerHash
ChessPeerHash.remove (clientNameHash.get (clientSocket));
)
/ / Client sent the game to new name
ChessPeerTalk (( "[inchess]" + clientName ),("/ yourname "+("[ inchess] "+ clientName)));
/ / To peer client sent the game
ChessPeerTalk ((String) chessPeerHash.get (clientName ),("/ peer "+" [inchess] "+ clientName));
)
Else if (chessPeerHash.containsValue (clientNameHash.get (clientSocket)))
(
Synchronized (clientNameHash)
(
/ / Client to name game
ClientNameHash.put ((Socket) getHashKey (clientNameHash, ( "[inchess]" + clientNameHash.get (clientSocket))),
( "[Inchess]" + clientName));
)
Synchronized (chessPeerHash)
(
/ / ChessPeerHash re-mapping
ChessPeerHash.put ((String) getHashKey (chessPeerHash, clientNameHash.get (clientSocket)), clientName);
/ / Client sent the game to new name
ChessPeerTalk (( "[inchess]" + clientName ),("/ yourname "+("[ inchess] "+ clientName)));
)
/ / To peer client sent the game
ChessPeerTalk ((String) getHashKey (chessPeerHash, clientName ),("/ peer "+" [inchess] "+ clientName));
)
Message = clientNameHash.get (clientSocket) + "name:" + clientName;
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, selfName;
ChessNameOpt String [] = ( "0", "0");
Int getOptNum = 0;
While (userToken.hasMoreTokens ())
(
GetUserToken = (String) userToken.nextToken ( "");
If (getOptNum> = 1 & & getOptNum <= 2)
(
ChessNameOpt [getOptNum-1] = getUserToken;
)
GetOptNum + +;
)
ChessNameOpt serverName = [0];
ChessNameOpt selfName = [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, lastLocation;
LastLocation = message.indexOf ( "", 0);
Message.substring peerName = ((firstLocation +1), lastLocation);
Message.substring message = ((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, lastLocation;
LastLocation = message.indexOf ( "", 0);
If (lastLocation ==- 1)
(
Feedback ( "null and void Order");
Return;
)
Else
(
Message.substring peerName = ((firstLocation +1), lastLocation);
Message.substring message = ((lastLocation +1));
Message = (String) clientNameHash.get (clientSocket )+">"+ message;
If (peerTalk (peerName, message))
(
Feedback ( "there is no such users:" peerName + + "\ n");
)
)
)
)
Else
(
Message = clientNameHash.get (clientSocket )+">"+ message;
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 hashKey;
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 ( "Gobang Java chat client");
Feedback ( "/ changename <your name> - change of name");
Feedback ( "/ list - updated User List");
Feedback ( "/ <username> <say it> -ç§èŠ");
Feedback ( "Note: orders, the target of the first speech for all");
)
Public void clientClose ()
(
Server.messageBoard.append ( "user disconnect:" clientSocket + + "\ n");
/ / If the client host games
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 ( "current link:" + clientDataHash.size ());
Try
(
ClientSocket.close ();
)
Catch (IOException exx)
(
)
IsClientClosed = true;
)
Public void run ()
(
DataInputStream inData;
Synchronized (clientDataHash)
(
Server.statusLabel.setText ( "current link:" + 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 ( "clear the Show");
Button serverStatusButton = new Button ( "server status");
Button serverOffButton = new Button ( "shutdown of the server");
Panel buttonPanel = new Panel ();
MessageServer server = new MessageServer ();
ServerSocket serverSocket;
Hashtable clientDataHash = new Hashtable (50);
Hashtable clientNameHash = new Hashtable (50);
Hashtable chessPeerHash = new Hashtable (50);
ChessServer ()
(
Super ( "Gobang Java server");
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 clientSocket;
Long clientAccessNumber = 1;
This.server = server;
Try
(
ServerSocket = new ServerSocket (port);
Server.messageBoard.setText ( "server began:" + serverSocket.getInetAddress (). GetLocalHost ()+":"+ serverSocket.getLocalPort () + "\ n");
While (true)
(
ClientSocket = serverSocket.accept ();
Server.messageBoard.append ( "user connections:" clientSocket + + "\ n");
DataOutputStream outData = new DataOutputStream (clientSocket.getOutputStream ());
ClientDataHash.put (clientSocket, outData);
ClientNameHash.put (clientSocket, (the "new visitors" + clientAccessNumber ++));
ServerThread thread = new ServerThread (clientSocket, clientDataHash, clientNameHash, chessPeerHash, server);
Thread.start ();
)
)
Catch (IOException ex)
(
System.out.println ( "has been running in the server \ n");
)
)
Public void actionPerformed (ActionEvent e)
(
If (e.getSource () == messageClearButton)
(
Server.messageBoard.setText ("");
)
If (e.getSource () == serverStatusButton)
(
Try
(
Server.messageBoard.append (the "server message:" + 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 ();
)
)
[Print this article] [Close]
Tags: java code, network, source






