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

📄 server.java

📁 The JICQ is the bureau area which JAVA writes according to "Customer s Machine/Server"(C/S) mode mes
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;
public class Server { //主服务器类
    public static void main(String args[]) throws IOException {
		
        ServerSocket s = new ServerSocket(8080); //在8080端口创建套接口
        System.out.println("Server start.." + s);
        try {
            while (true) {
                Socket socket = s.accept(); //无限监听客户的请求
                System.out.println("Connectino accept:" + socket);
                try {
                    new ServerThread(socket); //创建新线程
                } catch (IOException e) {
                    socket.close();
                }
            }
        } finally {
            s.close();
        } //捕或异常
    }
} //服务器程序结束
class ServerThread extends Thread {
    private BufferedReader in; //定义输入流
    int no; //定义申请的jicq号码
	String dserver,duser,dpass;
			
    private PrintWriter out; //定义输出流
    //继承线程
    private Socket socket; //定义套接口
    public ServerThread(Socket s) throws IOException { //线程构造函数
		dserver="jdbc:odbc:javaicq";
					duser="sa";
					dpass="";
        socket = s; //取得传递参数
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        //创建输入流
        out =
        new PrintWriter(
        new BufferedWriter(
        new OutputStreamWriter(socket.getOutputStream())),
        true);
        //创建输出流
        start(); //启动线程
    }
    
    public void run() { //线程监听函数
        try {
            while (true) {
                String str = in.readLine(); //取得输入字符串
                if (str.equals("end"))
                    break; //如果是结束就关闭连接
                else if (str.equals("login")) { //如果是登录
                    try {
                        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //连接数据库
                        Connection c =
                        DriverManager.getConnection(
                        dserver,
                        duser,
                        dpass);
                        String sql =
                        "select nickname,password from icq where icqno=?";
                        //准备从数据库选择呢称和密码
                        PreparedStatement prepare = c.prepareCall(sql);
                        //设定数据库查寻条件
                        String icqno = in.readLine();
                        int g = Integer.parseInt(icqno); //取得输入的jicq号码
                        System.out.println(icqno);
                        String passwd = in.readLine().trim(); //取得输入的密码
                        System.out.println(passwd);
                        prepare.clearParameters();
                        prepare.setInt(1, g); //设定参数
                        ResultSet r = prepare.executeQuery(); //执行数据库查寻
                        if (r.next()) { //以下比较输入的号码于密码是否相同
                            String pass = r.getString("password").trim();
                            System.out.println(pass);
                            if (passwd
                            .regionMatches(0, pass, 0, pass.length())) {
                                out.println("ok");
                                //如果相同就告诉客户ok
                                //并且更新数据库用户为在线
                                //以及注册用户的ip 地址
                                //*************register ipaddress
                                String setip =
                                "update icq set ip=? where icqno=?";
                                PreparedStatement prest = c.prepareCall(setip);
                                prest.clearParameters();
                                prest.setString(
                                1,
                                socket.getInetAddress().getHostAddress());
                                prest.setInt(2, g);
                                int set = prest.executeUpdate();
                                System.out.println(set);
                                //*************ipaddress
                                //set status online
                                String status =
                                "update icq set status=1 where icqno=?";
                                PreparedStatement prest2 =
                                c.prepareCall(status);
                                prest2.clearParameters();
                                prest2.setInt(1, g);
                                int set2 = prest2.executeUpdate();
                                System.out.println(set2);
                                //set online
                            }
                            //否者告诉客户失败
                            else
                                out.println("false");
                            r.close();
                            c.close();
                        } else {
                            out.println("nouser");
                            System.out.println("nouser");
                            r.close();
                            c.close();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    socket.close();
                } //end login
                //登录结束
                //以下为处理客户的新建请求
                else if (str.equals("new")) {
                    try {
                        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //连接数据库
                        Connection c2 =
                        DriverManager.getConnection(
                        dserver,
                        duser,
                        dpass);
                        String newsql =
                        "insert into icq(nickname,password,email,info,place,pic) values(?,?,?,?,?,?)";
                        //准备接受用户的呢称,密码,email,个人资料,籍贯,头像等信息
                        PreparedStatement prepare2 = c2.prepareCall(newsql);
                        String nickname = in.readLine().trim();
                        String password = in.readLine().trim();
                        String email = in.readLine().trim();
                        String info = in.readLine().trim();
                        String place = in.readLine().trim();
                        int picindex = Integer.parseInt(in.readLine());
                        prepare2.clearParameters();
                        prepare2.setString(1, nickname);
                        prepare2.setString(2, password);
                        prepare2.setString(3, email);
                        prepare2.setString(4, info);
                        prepare2.setString(5, place);
                        prepare2.setInt(6, picindex);
                        int r3 = prepare2.executeUpdate(); //执行数据库添加
                        String sql2 = "select icqno from icq where nickname=?";
                        //以下告诉客户其注册的号码
                        PreparedStatement prepare3 = c2.prepareCall(sql2);
                        prepare3.clearParameters();
                        prepare3.setString(1, nickname);
                        ResultSet r2 = prepare3.executeQuery();
                        while (r2.next()) {
                            //out.println(r2.getInt(1));
                            no = r2.getInt(1);
                            System.out.println(no);
                        }
                        out.println(no);
                        out.println("ok");
                        c2.close();
                        //完毕
                    } catch (Exception e) {
                        e.printStackTrace();
                        out.println("false");
                    }
                    socket.close();
                } //end new
                //新建用户结束
                //以下处理用户查找好友
                else if (str.equals("find")) {
                    try {
                        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                        Connection c3 =
                        DriverManager.getConnection(
                        dserver,
                        duser,
                        dpass);
                        //以下连接数据库,并且返回其他用户的呢称,性别,籍贯,个人资料等信息
                        String find =
                        "select nickname,sex,place,ip,email,info from icq";
                        Statement st = c3.createStatement();
                        ResultSet result = st.executeQuery(find);
                        while (result.next()) {
                            out.println(result.getString("nickname"));
                            out.println(result.getString("sex"));
                            out.println(result.getString("place"));
                            out.println(result.getString("ip"));
                            out.println(result.getString("email"));
                            out.println(result.getString("info"));
                        } //while end
                        out.println("over");
                        ////////GET ICQNO
                        int d, x;
                        boolean y;
                        //以下返回用户的jicq号码,头像号,及是否在线
                        ResultSet iset =
                        st.executeQuery("select icqno,pic,status from icq");
                        while (iset.next()) {
                            d = iset.getInt("icqno");
                            out.println(d);
                            x = iset.getInt("pic"); //pic info
                            out.println(x);
                            y = iset.getBoolean("status");
                            if (y) {
                                out.println("1");
                            } else {
                                out.println("0");
                            }
                            //System.out.println(d);
                        }
                        // end send jicqno
                        iset.close();
                        /////////icqno end
                        c3.close();
                        result.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println("false");
                    }
                    //socket.close();
                } //end find
                //查找好友结束
                //以下处理用户登录时读取其好友资料
                else if (str.equals("friend")) {
                    try {
                        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                        Connection c4 =
                        DriverManager.getConnection(
                        dserver,
                        duser,
                        dpass);
                        //以下连接好友表,返回用户的好友名单
                        String friend =
                        "select friend from friend where icqno=?";
                        PreparedStatement prepare4 = c4.prepareCall(friend);
                        prepare4.clearParameters();
                        int icqno = Integer.parseInt(in.readLine());
                        System.out.println(icqno);
                        prepare4.setInt(1, icqno);
                        ResultSet r4 = prepare4.executeQuery();
                        Vector friendno = new Vector(); //该矢量保存好友号码
                        while (r4.next()) {
                            friendno.add(new Integer(r4.getInt(1)));
                        }
                        //read friend info

⌨️ 快捷键说明

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