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

📄 server.java

📁 java实现的仿QQ的源码。可以查找添加删除好友。需要与数据库连接。
💻 JAVA
字号:
import java.io.*;
import java.net.*;
import java.sql.*;
import java.util.Vector;
class ServerThread extends Thread{//继承线程
private Socket socket;//定义接口
private BufferedReader in;//定义输入
private PrintWriter out;//定义输出
int no;//定义申请的Jtalk号码
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);//创建输出流
   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("jdbc:odbc:javatalk"," "," ");
         String sql="select nickname,password from talk where num=?";                                                               
           //准备从数据库选择呢称和密码                                                            
  PreparedStatement prepare=c.prepareCall(sql);//设定数据库查寻条件
          String num=in.readLine();
                int g=Integer.parseInt(num);//取得输入的Jtalk号码
                 System.out.println(num);
                 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

                   
                      String setip="update talk set ip=? where num=?";
					
                      PreparedStatement prest=c.prepareCall(setip);
					   
                      prest.clearParameters();
                      prest.setString(1,socket.getInetAddress().getHostAddress());
                      prest.setInt(2,g);
					 
                      int set=prest.executeUpdate();
					  System.out.println("result of set ip:"+set);
                        
                      String status="update talk set status=1 where num=?";
                      PreparedStatement prest2=c.prepareCall(status);
                       prest2.clearParameters();
                       prest2.setInt(1,g);
                       int set2=prest2.executeUpdate();
					   System.out.println("result of set status:"+set2);
                      
					  
                     
}
//否则出错
                 else {out.println("Error");r.close();c.close();}}
                 else{ out.println("Error");
                 System.out.println("Error");
                r.close();
                c.close();}
                }catch (Exception e){e.printStackTrace();}
                socket.close();
                }
          
  //以下为新建用户
else  if(str.equals("new")){
   try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//连接数据库
        Connection c2=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
		String sql2="select max(num) from talk";
		 PreparedStatement prepare3=c2.prepareCall(sql2);
        prepare3.clearParameters();
       ResultSet r2=prepare3.executeQuery();
	    while(r2.next()){
       no=r2.getInt(1);
	   if(no==0)
		   no=1;
	   else
		   no++;
		}
String newsql="insert into talk(num,nickname,password,email,info,place,pic) values(?,?,?,?,?,?,?)";

       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.setInt(1,no);
       prepare2.setString(2,nickname);
       prepare2.setString(3,password);
       prepare2.setString(4,email);
       prepare2.setString(5,info);
       prepare2.setString(6,place);
       prepare2.setInt(7,picindex);
       int r3=prepare2.executeUpdate();//执行数据库添加
	    //System.out.println(no);
     


//以下提示注册的Jtalk号码
      

     
      out.println(no);
      out.println("ok");
c2.close();

     }catch (Exception e){e.printStackTrace();out.println("ERROR");}
     socket.close();
   }
//以下为查找好友
else if(str.equals("find")){
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection c3=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
 
     String find="select nickname,sex,place,ip,email,info from talk";
    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"));
     }
     out.println("over");
    
     int d,x;
boolean y;
//以下返回用户的Jtalk号码,头像号,及是否在线
     ResultSet iset=st.executeQuery("select num,pic,status from talk");
     while(iset.next()){
     d=iset.getInt("num");
     out.println(d);
     x=iset.getInt("pic");
     out.println(x);
     y=iset.getBoolean("status");
      if (y){out.println("1");}
           else {out.println("0");}
     
     }
   
     iset.close();
  
      c3.close();result.close();
}catch (Exception e){e.printStackTrace();System.out.println("ERROR");}

}

//以下为登录时读取好友资料
else if(str.equals("friend")){
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection c4=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
//以下连接好友表,返回用户的好友名单
     String friend="select friend from friend where num=?";
     PreparedStatement prepare4=c4.prepareCall(friend);
        prepare4.clearParameters();
         int num=Integer.parseInt(in.readLine());
         System.out.println(num);
         prepare4.setInt(1,num);
       ResultSet r4=prepare4.executeQuery();
       Vector friendno=new Vector();
        while(r4.next()){
      friendno.add(new Integer(r4.getInt(1)));
     }

//以下显示好友的呢称,号码,ip地址,状态,头像,个人资料
    out.println(friendno.size());
          for(int i=0;i<friendno.size();i++){
         String friendinfo="select nickname,num,ip,status,pic,email,info from talk where num=?";
      PreparedStatement prepare5=c4.prepareCall(friendinfo);
      prepare5.clearParameters();
       prepare5.setObject(1,friendno.get(i));
      ResultSet r5=prepare5.executeQuery();
      boolean status;
         while(r5.next()){
       out.println(r5.getString("nickname"));
           out.println(r5.getInt("num"));
           out.println(r5.getString("ip"));
         status=r5.getBoolean("status");
         if (status)out.println("1");
           else {out.println("0");}
        out.println(r5.getInt("pic"));
        out.println(r5.getString("email"));
        out.println(r5.getString("info"));
     }
     r5.close();
}
     out.println("over");
     System.out.println("over");
      c4.close();r4.close();
}catch (Exception e){e.printStackTrace();System.out.println("ERROR");}

}
//以下为添加好友
 else if(str.equals("addfriend")){
System.out.println("add");
 try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection c6=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
 
        int friendnum=Integer.parseInt(in.readLine());
          System.out.println("friendnum:"+friendnum);
         int mynum=Integer.parseInt(in.readLine());
            System.out.println("mynum:"+mynum);
            String addfriend="insert into friend values(?,?)";
             PreparedStatement prepare6=c6.prepareCall(addfriend);
      prepare6.clearParameters();
       prepare6.setInt(1,mynum);
       prepare6.setInt(2,friendnum);
       int  r6=0;
      r6=prepare6.executeUpdate();
      if(r6==1) System.out.println("addfriend sucessfully");
      else  System.out.println("addfriend fail");

}catch (Exception e){e.printStackTrace();System.out.println("ERROR");}


System.out.println("end addfriend");
}

 else if(str.equals("addnewfriend")){
System.out.println("add");
 try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection c6=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
 
        int friendnum=Integer.parseInt(in.readLine());
          System.out.println("friendnum:"+friendnum);
         int mynum=Integer.parseInt(in.readLine());
            System.out.println("mynum:"+mynum);
            String addfriend="insert into friend values(?,?)";
             PreparedStatement prepare6=c6.prepareCall(addfriend);
      prepare6.clearParameters();
       prepare6.setInt(1,mynum);
       prepare6.setInt(2,friendnum);
       int  r6=0;
      r6=prepare6.executeUpdate();
      if(r6==1) System.out.println("addfriend sucessfully");
      else  System.out.println("addfriend fail");

String friendinfo="select nickname,num,ip,status,pic,email,info from talk where num=?";
//加好友成功,显示好友信息
      PreparedStatement prepare5=c6.prepareCall(friendinfo);
      prepare5.clearParameters();
       prepare5.setInt(1,friendnum);
      ResultSet r5=prepare5.executeQuery();
      boolean status;
         while(r5.next()){
       out.println(r5.getString("nickname"));
           out.println(r5.getInt("num"));
           out.println(r5.getString("ip"));
         status=r5.getBoolean("status");
         if (status)out.println("1");
           else {out.println("0");}
        out.println(r5.getInt("pic"));
        out.println(r5.getString("email"));
        out.println(r5.getString("info"));
     } 
       out.println("over");
     r5.close();
     c6.close();
}catch (Exception e){e.printStackTrace();System.out.println("ERROR");}
System.out.println("over addnewfriend");
}
//以下为删除好友
else if(str.equals("delfriend")){
System.out.println("del");
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection c7=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
 
        int friendnum=Integer.parseInt(in.readLine());
          System.out.println("friendnum:"+friendnum);
         int mynum=Integer.parseInt(in.readLine());
            System.out.println("mynum:"+mynum);
            String addfriend="delete from friend where num=? and friend=?";
            PreparedStatement prepare7=c7.prepareCall(addfriend);
      prepare7.clearParameters();
       prepare7.setInt(1,mynum);
       prepare7.setInt(2,friendnum);
       int  r7=0;
      r7=prepare7.executeUpdate();
      if(r7==1) System.out.println("delfrien sucessfully");
      else  System.out.println("delfriend fail");
}catch (Exception e){e.printStackTrace();System.out.println("del Error");}
}
//以下为退出
else if(str.equals("logout")){
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection c8=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
  //连接数据库,退出的用户状态设为0,ip地址清空
         int mynum=Integer.parseInt(in.readLine());
            System.out.println(mynum);
             String status="update talk set status=0 , ip=' ' where num=?";
                      PreparedStatement prest8=c8.prepareCall(status);
                       prest8.clearParameters();
                       prest8.setInt(1,mynum);
                   int r8=prest8.executeUpdate();
                     if(r8==1) System.out.println("ok  logout");
      else  System.out.println("ERROR logout");
}catch (Exception e){e.printStackTrace();System.out.println("logout ERROR");}
}
//以下为上线通知
else if(str.equals("getwhoaddme")){
System.out.println("getwhoaddme");
 try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection c9=DriverManager.getConnection("jdbc:odbc:javatalk"," "," ");
 
        int mynum=Integer.parseInt(in.readLine());
            System.out.println(mynum);
            String getwhoaddme="select num from friend where friend=?";
             PreparedStatement prepare6=c9.prepareCall(getwhoaddme);
      prepare6.clearParameters();
       prepare6.setInt(1,mynum);
      ResultSet r6=prepare6.executeQuery();
    Vector who=new Vector();
        while(r6.next()){
      who.add(new Integer(r6.getInt(1)));
   }

    for(int i=0;i<who.size();i++){
     String whoinfo="select ip from talk where num=? and status=1";
      PreparedStatement prepare=c9.prepareCall(whoinfo);
      prepare.clearParameters();
       prepare.setObject(1,who.get(i));
      ResultSet r=prepare.executeQuery();
       while(r.next()){
         out.println(r.getString("ip"));
            } 
           r.close();
         }
     out.println("over");
     System.out.println("over");
      c9.close();r6.close();
}catch (Exception e){e.printStackTrace();System.out.println("Error");}
}//找寻IP,给这些用户发上线通知
   System.out.println("Echo ing :"+str);
    }  System.out.println("Close...");
      }catch(IOException e){}
      finally {try{socket.close();}
                     catch(IOException e){}
    }
  }
}
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();}//捕或异常
    }
}

⌨️ 快捷键说明

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