要用到socket吧,我不懂,瞎说呵呵

解决方案 »

  1.   

    基于JAVA的ICQ系统的设计于实现 
    http://www.cn-java.com/target/news.php?news_id=420记得给分,哈哈。
      

  2.   

    服务器程序代码如下:(部分)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;//定义申请的jicq号码
     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:javaicq"," "," ");
             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("false");
                     System.out.println("false");
                    r.close();
                    c.close();}
                    }catch (Exception e){e.printStackTrace();}
                    socket.close();
                    }//end login
                 //登录结束 
      

  3.   

    //以下为处理客户的新建请求
    else  if(str.equals("new")){
       try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//连接数据库
            Connection c2=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");
    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("jdbc:odbc:javaicq"," "," ");
      //以下连接数据库,并且返回其他用户的呢称,性别,籍贯,个人资料等信息
         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
      

  4.   

    fangkq111(fangkq1,你的代码能用来用了吗?
    再说,怎样生成一个可安装文件呢?
      

  5.   

    java我也想学,但是我现在在学vc++没有时间学java
    但以后一定会学的
    我现在可以做QQ了,……
      

  6.   

    忘记告诉你们我的email:[email protected]
      

  7.   

    我记得 ibm dw上有一篇这样的文章。可以差一下。