1、 Panel p6 = new Panel(); Panel p7 = new Panel(); Panel p8 = new Panel(); Panel p9 = new Panel(); Panel p10 = new Panel(); /设置两个主要的文本框 Label lb1 = new Label(服务器界面 lb1.setBackground(new Color(250,120,150); Label lb2 = new Label(port BorderLayout border1 = new BorderLayout(); p1.setLayout(border1); p1.
2、add(BorderLayout.CENTER, area); BorderLayout border2 = new BorderLayout(); p5.setLayout(border2); p5.add(BorderLayout.NORTH, p3); p5.add(BorderLayout.CENTER, msgA); BorderLayout border3 = new BorderLayout(); p7.setLayout(border3); p7.add(BorderLayout.CENTER, p1); p7.add(BorderLayout.SOUTH, p5); p7.s
3、etBackground(new Color(250,150,200); JButton startButton = new JButton(启动服务 JButton sendButton = new JButton(发送 JButton flushButton = new JButton(刷新列表 FlowLayout fl = new FlowLayout(FlowLayout.LEFT); p8.setLayout(fl); p8.add(lb2); p8.add(portT); p8.add(startButton); p8.add(sendButton); p8.add(flushB
4、utton); p8.setBackground(new Color(250,120,150); BorderLayout border4 = new BorderLayout(); p9.setLayout(border4); p9.add(BorderLayout.CENTER, p7); p9.add(BorderLayout.SOUTH, p8); p10.setLayout(new BorderLayout(); Label lb3 = new Label(在线用户 lb3.setBackground(new Color(250,120,150); p10.add(lb3,Borde
5、rLayout.NORTH); p10.add(list,BorderLayout.CENTER); area.setEditable(false); BorderLayout border = new BorderLayout(); this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent arg0) System.exit(0); ); this.setLayout(border); this.add(BorderLayout.NORTH, lb1); this.add(BorderLa
6、yout.CENTER, p9); this.add(BorderLayout.EAST, p10); this.setTitle(聊天服务器 this.setBounds(100, 100, 600, 550); this.setVisible(true); /按钮监听器 startButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Thread t = new Start(); t.start();/启动按钮监听器-end /发送按钮监听器 sendButton.a
7、ddActionListener(new ActionListener() String msg = msgA.getText(); if (msg != null & msg != ) /如果消息不为空 Calendar ca = new GregorianCalendar(); int hh = ca.get(Calendar.HOUR_OF_DAY); int mm = ca.get(Calendar.MINUTE); int ss = ca.get(Calendar.SECOND); String time = new String(hh + : + mm + + ss + broad
8、cast(time + 系统消息: + msg);/那么广播这条系统消息 area.append(time + + msg + n msgA.setText(/end /刷新按钮监听器 flushButton.addActionListener(new ActionListener() if (list != null) list.removeAll();/清空在线用户列表,以便刷新 SetMap.Entry mySet = container.entrySet(); for (Iterator it = mySet.iterator(); it.hasNext();) /刷新列表 Map.E
9、ntry me = it.next(); String aClientName = me.getKey(); Socket aClient = me.getValue(); String aClientAddress = aClient.getInetAddress().getHostAddress(); list.add(aClientName + - + aClientAddress); /end of for /end of actionPerformed msgA.addKeyListener(new KeyAdapter()/键盘监听器-按下Enter发送信息 public void
10、 keyPressed(KeyEvent e) int value = e.getKeyCode(); if(value = KeyEvent.VK_ENTER) /end of init()class Start extends Thread /启动服务器的线程 public void run() try if(server ! !server.isClosed() area.append(警告!服务器已在启动中! else server = new ServerSocket(Integer.parseInt(portT.getText();/启动服务器 area.append(new Da
11、te().toString() +n+ 恭喜!_+服务器启动成功! + nn while(true) client = server.accept(); Thread sgS = new SgService(client);/为每位登录的客户创建一个线程 sgS.start();/启动客户线程 catch (Exception e) System.out.println(cuowu 1 e.printStackTrace(); /end of run() /end of Start/处理单个客户的线程class SgService extends Thread/SgService-begin
12、private Socket client = null;/客户套接字 private BufferedReader br = null;/输入流 private PrintStream ps = null; private int counter = 0;/记录是第几次接受用户的信息 private int mark = 0;/记录用户说不文明用语的次数 private String name = null; SgService(Socket client) /构造方法 this.client = client; public void run() /run()-begin br = new
13、 BufferedReader(new InputStreamReader(client.getInputStream(); ps = new PrintStream(client.getOutputStream(); String msg = null; while (msg = br.readLine() != null) /无限循环,意味着可以和客户进行无限次交互 if(counter = 0) name = msg; container.put(name,client); list.add(name + + client.getInetAddress().getHostAddress(
14、); String time = hh + ; broadcast(time + name + 上线了! area.append(time + name + counter +; else if(msg.equals(你是个笨蛋) mark = mark + 1; if(mark 3) singleCom(time + 警告!请注意文明用语! ,client); /在服务器端显示这个用户说不文明语言的次数 + name +第 + mark+ 次使用了不文明用语,特此警告! else/如果客户第三次说不文明的话,系统就把他踢出聊天室 if(mark = 3) singleCom(time + 由
15、于您多次使用了不文明用语,经警告无效,现已被踢出聊天室!/告诉他本人 removeClient(name,client);/从系统列表中删除这个人的信息 /并向所有人广播这一消息 + name + 由于多次使用了不文明用语,经警告无效,现已被踢出聊天室! area.append(time + name+说:+msg + /将客户发送的消息显示在服务器的窗口中 broadcast(time + name+msg+/同时向每个在线客户广播这则消息 /end of while catch (Exception ex) 下线了! list.remove(name + container.remove(
16、name); /run()-end/SgService-end void removeClient(String name,Socket client)/踢人/广播void broadcast(String msg) /broadcast()-begin Iterator String message = msg; while (it.hasNext() /如果列表中还有客户 Socket tempClient = me.getValue(); singleCom(message, tempClient);/就把消息向发给这个客户 /broadcast()-end/向单个客户发送消息priva
17、te void singleCom(String msg, Socket aClient) /singleCommunication-begin PrintStream pw = new PrintStream(aClient.getOutputStream(); pw.println(msg); catch (Exception ex) ex.printStackTrace();/singleCommunication-endpublic static void main(String args) new Server().init(); /启动服务器窗口服务器:/end of Server
18、/登录界面:class Login extends JFrame implements ActionListenerTextField txtPort;TextField txtIP;TextField txtName;JButton btnLogin;JButton btnCancel;Socket toServer;BufferedReader in;PrintStream out;public Login() Panel p1=new Panel(); Panel p2=new Panel(); Panel p3=new Panel(); Panel p4=new Panel(); Pa
19、nel p5=new Panel(); Label l1=new Label( Label l2=new Label(IP Label l3=new Label(昵称 txtPort=new TextField(,15); txtIP=new TextField(192.168.55.1 txtName=new TextField(小敏 p2.add(l1); p2.add(txtPort); p3.add(l2); p3.add(txtIP); p4.add(l3); p4.add(txtName); GridLayout g=new GridLayout(3,1);/三行一列的网格布局管理
20、器 p1.setLayout(g);/设置布局管理器 p1.add(p2);/将组件添加到面板中 p1.add(p3); p1.add(p4); p1.setBackground(new Color(100,250,100);/更改面板颜色 btnLogin=new JButton(登陆 btnCancel=new JButton(取消 btnLogin.addActionListener(this);/添加监听器 btnCancel.addActionListener(this); BorderLayout border1=new BorderLayout();/边界布局管理器 this.setLayout(border1); p5.add(btnLogin); p5.add(btnCan
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1