📄 chessserver.java
字号:
{ 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("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=true; } public void run() { DataInputStream inData; 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 serverSocket; 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 clientSocket; long clientAccessNumber=1; this.server=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(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -