快速业务通道

Java实现的c/s的聊天室 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

Java实现的c/s的聊天室

时间:2011-01-22 iteye zhaohong

根据马士兵老师聊天室程序进行优化,同时增加聊天者之间的交互。

同时增加服务端会为每一个客户端增加一个交互窗口,让服务器可以和每一个客户端交互!

服务端代码

1.import java.net.*;
2.import java.util.*;
3.import java.io.*;
4.import java.awt.*;
5.import java.awt.event.*;
6.import javax.swing.*;
7.
8.import javax.swing.JFrame;
9.
10.public class ChatServer extends JFrame {
11.    JTextArea ta = new JTextArea();
12.    ServerSocket server = null;
13.    Collection cClient = new ArrayList();
14.
15.    public ChatServer(int port) throws Exception {
16.        server = new ServerSocket(port);
17.        add(ta, BorderLayout.CENTER);
18.        setBounds(200, 200, 300, 450);
19.        this.addWindowListener(new WindowAdapter() {
20.            public void windowClosing(WindowEvent e) {
21.                System.exit(0);
22.            }
23.        });
24.        setVisible(true);
25.    }
26.
27.    public void startServer() throws Exception {
28.        while (true) {
29.            Socket s = server.accept();
30.            cClient.add(new ClientConn(s));
31.            ta.append(s.getInetAddress().getHostName() + "进入" + "    " + "端口号"
32.                    + s.getPort());
33.            ta.append("\n" + "当前在前总人数: " + cClient.size() + "\n\n");
34.        }
35.    }
36.
37.    class ClientConn extends Frame implements Runnable, ActionListener {
38.        TextArea ta1 = null;
39.        TextArea ta2 = null;
40.        Button btn = null;
41.        Socket s = null;
42.
43.        public ClientConn(Socket s) {
44.            ta1 = new TextArea(3, 30);
45.            ta2 = new TextArea(2, 15);
46.            btn = new Button("发送");
47.            this.setLayout(new BorderLayout());
48.            this.add(ta1, BorderLayout.CENTER);
49.            this.add(ta2, BorderLayout.SOUTH);
50.            this.add(btn, BorderLayout.EAST);
51.            this.setSize(300, 200);
52.            this.setVisible(true);
53.            this.setTitle("" + s.getInetAddress().getHostName() + "端口"
54.                    + s.getPort());
55.            this.s = s;
56.            (new Thread(this)).start();
57.            btn.addActionListener(this);
58.        }
59.
60.        public void actionPerformed(ActionEvent e) {
61.            try {
62.                DataOutputStream dos = new DataOutputStream(s.getOutputStream());
63.                dos.writeUTF("服务器:\n" + ta2.getText() + "\n");
64.                ta1.append("服务器:\n" + ta2.getText() + "\n");
65.                ta2.setText("");
66.            } catch (IOException E) {
67.
68.            }
69.        }
70.
71.        public void send(String str, String st) throws IOException {
72.            DataOutputStream dos = new DataOutputStream(s.getOutputStream());
73.            dos.writeUTF(st + "说

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号