⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qqserver.java

📁 用JAVA实现的单独聊天窗口的程序,并且可以传送文件
💻 JAVA
字号:
/* * --------------------------------------------------------------------- * 自定义QQ聊天系统 * 服务器                       * --------------------------------------------------------------------- * 所有数据统一用自定义数据类型QQMessage发送 */package NewQQ;import java.net.*;import java.io.*;import java.util.*;public class QQServer{    public static void main(String[] args) throws Exception    {        ServerSocket serversocket = new ServerSocket(14789);//创建服务器套字节        HashMap<String, Socket> user = new HashMap<String, Socket>();        HashMap<String, ObjectOutputStream> userout = new HashMap<String, ObjectOutputStream>();        while (true)        {            Socket clientsocket = serversocket.accept();//返回一个客户端SOCKET对象实例            QQServerThread clientthread = new QQServerThread(clientsocket,                    user, userout);            clientthread.start();        }    }}class QQServerThread extends Thread{    Socket clientsocket;    HashMap<String, Socket> user;    HashMap<String, ObjectOutputStream> userout;    Set<String> username;    Iterator it;    String name;    public QQServerThread(Socket clientsocket, HashMap<String, Socket> user,            HashMap<String, ObjectOutputStream> userout)    {        this.clientsocket = clientsocket;        this.user = user;        this.userout = userout;    }    public void run()    {        try        {            QQMessage sendmessage = new QQMessage();// 用于发送信息            // 输出流            ObjectOutputStream sendmsg = new ObjectOutputStream(clientsocket                    .getOutputStream());            // 获取客户套字节的输入流,即客户端要发送的            ObjectInputStream recvmsg = new ObjectInputStream(clientsocket                    .getInputStream());            // 1.判断用户名是否存在,并返回结果            QQMessage recvmessage = (QQMessage) recvmsg.readObject();            name = recvmessage.getSender();            username = user.keySet();            // 1.1用户名已经存在,反馈,程序结束            if (username.contains(name))            {                sendmessage.setMessage("false");                sendmsg.writeObject(sendmessage);                sendmsg.flush();                return;            }            else            {                // 1.2用户名可以使用                // 1.2.1反馈                sendmessage.setMessage("true");                sendmsg.writeObject(sendmessage);                sendmsg.flush();                it = username.iterator();                while (it.hasNext())                {                    String tempstring = (String) it.next();                    Socket recvsocket = user.get(tempstring);                    // 1.2.2向各在线用户发送该用户                    QQMessage sendadd = new QQMessage();                    sendadd.setType(1);                    sendadd.setSender(name);                    ObjectOutputStream oos = userout.get(tempstring);                    oos.writeObject(sendadd);                    oos.flush();                    // 1.2.3向该用户发送在线用户名字                    QQMessage sendonline = new QQMessage();                    sendonline.setType(2);                    sendonline.setSender(tempstring);                    sendmsg.writeObject(sendonline);                    sendmsg.flush();                }                // 1.2.4添加到在线用户列表                user.put(name, clientsocket);                userout.put(name, sendmsg);                // 2.循环接收信息                while (true)                {                    QQMessage mrecvmessage = (QQMessage) recvmsg.readObject();                    int type = mrecvmessage.getType();                    if (mrecvmessage == null || type == 6)                        break;                    if (type == 3)                    {// 发给所有人的                        username = user.keySet();                        it = username.iterator();                        while (it.hasNext())                        {                            String tempstring = (String) it.next();                            Socket recvsocket = user.get(tempstring);                            ObjectOutputStream oos = userout.get(tempstring);                            oos.writeObject(mrecvmessage);                            oos.flush();                        }                    }                    else                    {// 发给单个人                        Socket recvsocket = user.get(mrecvmessage.getRecver());                        ObjectOutputStream oos = userout.get(mrecvmessage                                .getRecver());                        oos.writeObject(mrecvmessage);                        oos.flush();                    }                }                // 3.删除user列表中该用户,并断开与其连接,通知其他所有用户该用户下线                user.remove(name);                userout.remove(name);                username = user.keySet();                it = username.iterator();                while (it.hasNext())                {                    QQMessage senddel = new QQMessage();                    String tempstring = (String) it.next();                    Socket recvsocket = user.get(tempstring);                    senddel.setType(7);                    senddel.setSender(name);                    ObjectOutputStream oos = userout.get(tempstring);                    oos.writeObject(senddel);                    oos.flush();                }            }        }        catch (Exception e)        {        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -