我现在正在作毕业设计,可是服务器端老是有问题,现在都快答辩了,所以挺着急的 ,想求CSDN上的程序员朋友帮帮忙,给我提供一个服务器端的源代码,分不够的话,我可以另外开贴。具体要求:多线程的处理客户端的连接:每一个客户的连接,都要放到一个单独的线程中处理。线程的管理:能够显示当前的线程数和线程的名称服务器的退出和客户端的退出:能够健壮的处理客户端的退出和服务器端的退出...

解决方案 »

  1.   

    有一本书《java编程案例精解》,里面的第五章讲的就是聊天服务器的开发,代码在这里有的下:http://www.firstarcicl.com.cn/download.asp
      

  2.   

    有一本书《java编程案例精解》,里面的第五章讲的就是聊天服务器的开发,代码在这里有的下:http://www.firstarcicl.com.cn/download.asp
    ---------------------------这本书里边的聊天程序我已经看过了,我做的是三层架构的 客户端,服务器端和数据库,用户的登陆,注册和添加,删除好友都得通过服务器端对数据库进行访问,不是像这本书里只是简单的放进Vector中。不过还是谢谢你!  
      

  3.   

    [email protected] 我过去写了一个
      

  4.   

    import java.io.*;
    import java.net.*;
    import java.util.*;class ServerThread extends Thread {
        private Socket socket;
        String name = "";
        private BufferedReader in;
        private PrintWriter out;
        public ServerThread(Socket s) throws IOException {
            socket = s;
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
                    .getOutputStream())), true);
            Server.outList.add(out);
            start();
        }    public void run() {
            try {
                while (true) {
                    String str = in.readLine();                if (str.length() >= 5 && str.substring(0, 5).equals("NAME:")) {
                        name = str.substring(5, str.length());
                        Server.nameList.add(name);
                        out.println("欢迎 " + name + " 来到聊天室,当前共有"
                                + Server.nameList.size() + "人在线");
                        System.out.println("一个客户端连接>>>昵称: " + name);
                        for (int w = 0; w < Server.outList.size(); w++) {
                            if (Server.outList.get(w) == out) {
                                ((PrintWriter) Server.outList.get(w))
                                        .println(sendClient(Server.nameList));
                                ((PrintWriter) Server.outList.get(w))
                                        .println(sendClientno(Server.nameList));
                                continue;
                            }                        ((PrintWriter) Server.outList.get(w))
                                    .println(sendClient(Server.nameList));
                            ((PrintWriter) Server.outList.get(w))
                                    .println(sendClientno(Server.nameList));
                            ((PrintWriter) Server.outList.get(w)).println(name
                                    + "进入了聊天室,当前共有" + Server.outList.size() + "人在线");
                        }                    out.println(sendClient(Server.nameList));
                        out.println(sendClientno(Server.nameList));
                        // System.out.println("一个客户端已经连接:
                        // "+socket.getInetAddress()+"端口: "+socket.getPort());
                        printInfo(Server.nameList);
                        continue;
                    }
                    // System.out.println(str);
                    if (str.equals("[ClientMessageEND]")) {
                        break;
                    }                if (str.length() >= 16
                            && str.substring(0, 16).equals("[Client:Message]")) {
                        str = str.substring(16, str.length());
                    }                for (int i = 0; i < Server.outList.size(); i++) {
                        // System.out.println("received "+i+ str);
                        if (Server.outList.get(i) == out)
                            ((PrintWriter) Server.outList.get(i)).println("你说: "
                                    + str);
                        else {
                            ((PrintWriter) Server.outList.get(i)).println(name
                                    + "说: " + str);
                        }
                    }            }
                // System.out.println("关闭socket");
            } catch (IOException e) {
                System.out.println(name + " 非正常断开连接");
            } finally {
                try {                for (int i = 0; i < Server.clicentList.size(); i++) {
                        if (Server.clicentList.get(i) == socket) {
                            Server.clicentList.remove(i);
                            name = Server.nameList.get(i) + "";
                            System.out.println(Server.nameList.get(i) + " 断开了连接");
                            Server.nameList.remove(i);
                            Server.outList.remove(i);
                            printInfo(Server.nameList);
                            for (int j = 0; j < Server.outList.size(); j++) {
                                ((PrintWriter) Server.outList.get(j)).println(name
                                        + "离开了聊天室,当前共有" + Server.outList.size()
                                        + "人在线");
                                ((PrintWriter) Server.outList.get(j))
                                        .println(sendClient(Server.nameList));
                                ((PrintWriter) Server.outList.get(j))
                                        .println(sendClientno(Server.nameList));
                            }                        break;
                        }                }                // System.out.print("当前一共有"+Server.nameList.size()+"个人在聊天: ");
                    socket.close();
                } catch (IOException e) { System.out.println("sock怎么就关不掉捏--!");
                }
            }
        }    public static String sendClientno(ArrayList al) {
            String s = "[ServerMassageforgueno]在线人数 ";
            s += al.size();
            return s;
        }    public static String sendClient(ArrayList al) {
            String s = "[ServerMassageforguest]";
            for (int i = 0; i < al.size(); i++)
                s += al.get(i) + " ";
            return s;
        }    // 输出当前聊天室信息
        public static void printInfo(ArrayList al) {
            System.out.print("当前在线人数 " + al.size() + "   :");
            for (int i = 0; i < al.size(); i++)
                System.out.print(al.get(i) + "\t");
            System.out.print("\n");
        }}public class Server {
        static int n = 0;    static final int PORT = 8080;    static ArrayList clicentList = new ArrayList();    static ArrayList nameList = new ArrayList();    static ArrayList outList = new ArrayList();    static PrintWriter out;    public static void main(String[] args) throws IOException {
            ServerSocket s = new ServerSocket();        try {
                System.out.println("启动服务器......");
                s = new ServerSocket(PORT);
                System.out.println("服务器启动成功\n" + s);
                System.out.println("等待客户端连接...");
                while (true) {
                    Socket socket = s.accept();
                    try {
                        new ServerThread(socket);                    clicentList.add(socket);
                    } catch (IOException e) {
                        socket.close();
                    }
                }
            } catch (IOException e) {
                System.out.println("服务器启动失败,可能是端口"+PORT+"已经被占用");
            } finally {
                s.close();
            }
        }
    }
    以前学习的时候写的水平不高但基本达到楼住的要求  只是如果服务器端退出客户端时没有反应的  当时没有考虑  不过要加上这个功能很容易     客户端 需要netbeans自带的关于freelayout的jar包  楼主要的话留邮箱
      

  5.   

    楼主加我msn,我毕业设计里的聊天模块基本上实现了你说的那些功能
    [email protected]