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

📄 serverframe.java

📁 用java写的聊天系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * ServerFrame.java * * Created on 2005年12月18日, 下午3:10 */package javaicqproj;/** * * @author  shiyang */import java.awt.*;import javax.swing.*;import javax.swing.table.*;import java.io.*;import java.net.*;import java.sql.*;import java.util.*;public class ServerFrame extends javax.swing.JFrame {        private int clientNum;//记录所占端口数    private int udpport;    private DefaultTableModel userList;    private JTable userListTable;    private JTextArea jInfoTextArea=new JTextArea();        /** Creates new form ServerFrame */    public ServerFrame() {        String[] columnNames={"在线用户","jicq号"};         userList=new DefaultTableModel(columnNames,0);        userListTable=new JTable();        userListTable.setModel(userList);        userListTable.setEnabled(false);        initComponents();        jPortText.setText("8080");        clientNum=0;        udpport=2000;    }        /** This method is called from within the constructor to     * initialize the form.     * WARNING: Do NOT modify this code. The content of this method is     * always regenerated by the Form Editor.     */    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents    private void initComponents() {        jSplitPane1 = new javax.swing.JSplitPane();        jUserListScrollPane = new javax.swing.JScrollPane();        jUserListScrollPane.setViewportView(userListTable);        jInfoScrollPane = new javax.swing.JScrollPane();        jInfoScrollPane.setViewportView(jInfoTextArea);        jPanel1 = new javax.swing.JPanel();        jPortLabel = new javax.swing.JLabel();        jPortText = new javax.swing.JTextField();        jPanel2 = new javax.swing.JPanel();        jStartButton = new javax.swing.JButton();        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);        setTitle("JavaICQ-Server");        jSplitPane1.setDividerSize(2);        jSplitPane1.setResizeWeight(0.3);        jSplitPane1.setLeftComponent(jUserListScrollPane);        jSplitPane1.setRightComponent(jInfoScrollPane);        getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER);        jPanel1.setLayout(new java.awt.GridLayout(1, 4));        jPortLabel.setFont(new java.awt.Font("宋体", 0, 14));        jPortLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);        jPortLabel.setText("\u76d1\u542c\u7aef\u53e3");        jPanel1.add(jPortLabel);        jPortText.setEditable(false);        jPortText.setFont(new java.awt.Font("宋体", 0, 14));        jPanel1.add(jPortText);        jPanel1.add(jPanel2);        jStartButton.setFont(new java.awt.Font("宋体", 0, 14));        jStartButton.setText("\u5f00\u59cb\u76d1\u542c");        jStartButton.addActionListener(new java.awt.event.ActionListener() {            public void actionPerformed(java.awt.event.ActionEvent evt) {                jStartButtonActionPerformed(evt);            }        });        jPanel1.add(jStartButton);        getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);        pack();    }    // </editor-fold>//GEN-END:initComponents    private void jStartButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jStartButtonActionPerformed// TODO add your handling code here:        try {            ServerSocket serverSocket=new ServerSocket(8080);//在8080端口创建套接口            jInfoTextArea.append("系统提示:聊天服务器系统开始启动......\n");            new listenThread(serverSocket);        }        catch(IOException e) {            jInfoTextArea.append("对不起,不能监听端口:8080.\n");             System.exit(-1);        }        jStartButton.setEnabled(false);    }//GEN-LAST:event_jStartButtonActionPerformed    public class listenThread extends Thread {        private ServerSocket serverSocket;        private ProcessDBService pDBService=new ProcessDBService();        public listenThread(ServerSocket s) throws IOException {//线程构造函数            serverSocket=s;//取得传递参数            this.start();//启动线程         }        public void run() {            try{                while(true){                     Socket socket=serverSocket.accept();//无限监听客户的请求                     jInfoTextArea.append("Connectino accept:"+socket+"\n");                     clientNum++;                     pDBService.processDB(socket);                 }                            }            catch(IOException e){}            finally{                try{serverSocket.close();}catch(IOException e){}            }        }            }        /**     * @param args the command line arguments     */    public static void main(String args[]) {        java.awt.EventQueue.invokeLater(new Runnable() {            public void run() {                ServerFrame sf=new ServerFrame();                sf.setSize(417,333);                sf.setVisible(true);            }        });    }        // Variables declaration - do not modify//GEN-BEGIN:variables    private javax.swing.JScrollPane jInfoScrollPane;    private javax.swing.JPanel jPanel1;    private javax.swing.JPanel jPanel2;    private javax.swing.JLabel jPortLabel;    private javax.swing.JTextField jPortText;    private javax.swing.JSplitPane jSplitPane1;    private javax.swing.JButton jStartButton;    private javax.swing.JScrollPane jUserListScrollPane;    // End of variables declaration//GEN-END:variables    public class ProcessDBService{        private final String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=javaicq.dll";        private final String username="gws";        private final String password="pass";        private Socket socket;//定义套接口        private BufferedReader in;//定义输入流        private PrintWriter out;//定义输出流        /** Creates a new instance of ServerThread */        public ProcessDBService(){        }                public void processDB(Socket s){            socket=s;//取得传递参数            try{                in=new BufferedReader(new InputStreamReader(socket.getInputStream()));//创建输入流                out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);//创建输出流                String str=in.readLine();//取得输入字符串                if(str==null)return;                else if(str.equals("end"))return;//如果是结束就关闭连接                else if(str.equals("login")) {//登录                    this.login();                }                         else if(str.equals("new")){//客户新建请求                    this.newUser();                }                else if(str.equals("find")){//用户查找好友                    this.findFriends();                }                else if(str.equals("friend")){//用户登录时读取其好友资料                    this.getFriendsInfo();                }                else if(str.equals("addfriend")){//用户添加好友                    this.addFriend();                }                else if(str.equals("delfriend")){//用户删除好友                    this.deleteFriend();                }                else if(str.equals("logout")){//用户退出                    this.logout();                }             }             catch(IOException e){}//捕或异常             finally{                 try{socket.close();}                 catch(IOException e){}            }//end of try        }        /** 登陆线程 */        private void login() {            try{                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//连接数据库                Connection c=DriverManager.getConnection(url,username,password);                String sql="select nickname,password,status from icq where icqno=?";                                                                               //准备从数据库选择呢称和密码                                                                            PreparedStatement prepare=c.prepareCall(sql);//设定数据库查寻条件                String icqno=in.readLine();                int g=Integer.parseInt(icqno);//取得输入的jicq号码                jInfoTextArea.append("Jicq号码:"+icqno);                String passwd=in.readLine().trim();//取得输入的密码                prepare.clearParameters();                prepare.setInt(1,g);//设定参数                ResultSet r=prepare.executeQuery();//执行数据库查寻                if(r.next()){//以下比较输入的号码于密码是否相同                    String pass=r.getString("password").trim();                    if(passwd.regionMatches(0,pass,0,pass.length())){                        if(r.getString("status").trim().equals("上线")){                            out.println("上线");                            jInfoTextArea.append(" Already in line\n");                        }                        else{                            out.println("ok");                            //如果相同就告诉客户ok                            String nickname=r.getString("nickname").trim();                            out.println(nickname);                            //返回给客户一个udp发送端口号                            out.println(udpport+clientNum);                            //返回客户的昵称,并且更新数据库用户为在线,以及注册用户的ip 地址,和udp发送端口                            String setip="update icq set ip=?,sendport=?,status='上线' where icqno=?";                            PreparedStatement prest=c.prepareCall(setip);                            prest.clearParameters();                            prest.setString(1,socket.getInetAddress().getHostAddress());                            prest.setInt(2,udpport+clientNum);

⌨️ 快捷键说明

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