大家可以介绍一下qq实现原理吗???用java  vc都能实现吗????

解决方案 »

  1.   

    参考LumaQQ
    有个毛的过用参考LIUNX可以说是盗版WINDOWS的.
       虽然说是国产的但是谁会用这个系统.嘿嘿.我用过几次.全是代码操作.我都还不知道我些的这个名字是不是对的也.很久都没有接到个参考LumaQQ
      

  2.   

    我也猜测一下,比较同意jorneyR的意见,不过我觉得客户端之间的通信大概还是不能脱离服务
    器吧,总之只是客户和服务器的通信相对简单些,主要是要解决客户与客户间的通信,这还是要依靠服务器来协调,给个较简单的C/S下通信的代码,希望能给个参考:
    -------------------------------------------------------------------
    客户端:
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.io.*;
    import java.net.*;class Customer extends Object implements Serializable{
    String name;
    String psw;
    }public class AppClient extends JApplet implements ActionListener{
        //Variable for the panel
    JPanel panelObject;
    JLabel labelTitle;
    //variables for labels
    JLabel labelUserName;
    JLabel labelPassword;
    JFrame f1;
    //variables for data entry controls
    JTextField textUserName;
    JPasswordField textPassword;
    JButton submit; //Variables for the layout
    GridBagLayout gbObject;
    GridBagConstraints gbc; public void init(){
        //Initialize the layout variables
    gbObject = new GridBagLayout();
    gbc = new GridBagConstraints();
    panelObject = (JPanel)getContentPane();
    panelObject.setLayout(gbObject); //Initialize label controls
    labelTitle=new JLabel("LOGIN CREATION FORM");
    labelUserName = new JLabel("Login Name");
    labelPassword = new JLabel("Password"); //Initialize data entry controls
    textUserName = new JTextField(15);
    textPassword = new JPasswordField(10);
    submit=new JButton("Submit"); //Add controls for Customer Name
    gbc.anchor = GridBagConstraints.NORTHWEST;
    gbc.gridx = 1;
    gbc.gridy = 2;
    gbObject.setConstraints(labelTitle,gbc);
    panelObject.add(labelTitle); //Add controls for Customer Name
    gbc.anchor = GridBagConstraints.NORTHWEST;
    gbc.gridx = 1;
    gbc.gridy = 5;
    gbObject.setConstraints(labelUserName,gbc);
    panelObject.add(labelUserName); gbc.anchor = GridBagConstraints.NORTHWEST;
    gbc.gridx = 4;
    gbc.gridy = 5;
    gbObject.setConstraints(textUserName,gbc);
    panelObject.add(textUserName); //Add controls for Cell Number
    gbc.anchor = GridBagConstraints.NORTHWEST;
    gbc.gridx = 1;
    gbc.gridy = 8;
    gbObject.setConstraints(labelPassword,gbc);
    panelObject.add(labelPassword); gbc.anchor = GridBagConstraints.NORTHWEST;
    gbc.gridx = 4;
    gbc.gridy = 8;
    gbObject.setConstraints(textPassword,gbc);
    panelObject.add(textPassword); gbc.anchor = GridBagConstraints.NORTHWEST;
    gbc.gridx = 4;
    gbc.gridy = 17;
    gbObject.setConstraints(submit,gbc);
    panelObject.add(submit);
    submit.addActionListener(this); f1=new JFrame("Main Menu");
    JButton button1,button2,button3;
    button1=new JButton("Log a Problem");
    button2=new JButton("Tech Chat");
    button3=new JButton("Exit");
    f1.getContentPane().setLayout(new FlowLayout());
    f1.getContentPane().add(button1);
    f1.getContentPane().add(button2);
    f1.getContentPane().add(button3); }
    public void actionPerformed(ActionEvent ev){
        Object obj=ev.getSource();
        if(obj==submit){
          Customer uobj=new Customer();
          uobj.name=textUserName.getText();
          uobj.psw=new String(textPassword.getPassword());
    try{
    Socket toServer;
    toServer=new Socket("127.0.0.1",1001);
    //Thread.sleep(5000);//此处设置了与服务端连接通信的等待时间 ObjectOutputStream streamToServer=new ObjectOutputStream(toServer.getOutputStream());
    streamToServer.writeObject((Customer)uobj); BufferedReader bf=new BufferedReader(new InputStreamReader(toServer.getInputStream()));
    String loginId=bf.readLine(); if(loginId.length()!=0){
    getAppletContext().showStatus("Status:"+loginId);
    f1.setSize(300,300);
    f1.setVisible(true);
    streamToServer.close();
    bf.close();
    }
    }catch(Exception e){showStatus("Exception..in connecting to server");}
        }
      }
    }
    -------------------------------------------------------------------
    服务端:
    import java.net.*; //for Socket
    import java.io.*;  //for IOExceptionpublic class AppServer extends Thread{
        ServerSocket serv;    public AppServer(){
         try{
      serv=new ServerSocket(1001);
    }catch(IOException e){System.out.println(e+"..Could not start server.");} System.out.println("Server started . . .");
    this.start();
        }    public void run(){
      try{
      while(true){
      Socket client=serv.accept(); //用accept()方法接受请求,并返回一个套接字对象
      Conn con=new Conn(client);
    }
    }catch(IOException e){System.out.println(e+"..not listening.");}
    } public static void main(String args[]){
      new AppServer();
    }
    }class Customer implements Serializable{
        String name;
        String psw;
    }
    //以下线程用于连接服务器与客户端,并处理彼此间通信
    class Conn extends Thread{
      protected Socket netClient;
      protected ObjectInputStream fromClient; //PAGE7.10中使用的是BufferedReader类
      protected PrintStream toClient;   public Conn(Socket client){
            netClient=client;
            try{
      fromClient=new ObjectInputStream(netClient.getInputStream());//注意与7.10的不同之处
      toClient=new PrintStream(netClient.getOutputStream());
    }catch(IOException e){
      try{
      netClient.close();
    }catch(IOException ex){System.out.println(ex+"..unable to set up streams.");}
    }
    this.start();
    } public void run(){
      Customer clientMsg;
      try{
      for(;;){
      clientMsg=(Customer)fromClient.readObject();//在PAGE7.10中是用readLine()方法
      if(clientMsg==null){
      break;
    }
    toClient.println("Received from "+clientMsg.name);
    System.out.println(clientMsg.name+" is connecting....");
    }
    }
    catch(IOException e){}
    catch(ClassNotFoundException e1){}
    finally{
      try{netClient.close();}catch(IOException e){}
    } //当注销时,服务器退出循环引起执行finally块并保证关闭套接字避免耗尽服务器内存。
    }}
    --------------------------------------
    分别编绎这两个类,然后运行服务端就会打开1001端口做为服务端口,客户端则向此端口请求服务,剩下的就发挥你的想像吧这只是用来测试用的,所以比较简单。
      

  3.   

    用gaim
    在google一搜就有
    有qq插件,很有参考意义
      

  4.   

    不知道大家有没有用过jabber做服务器做那个,这几天看了一下书觉的那个还可以啊
      

  5.   

    beebon用的是同步的,其实我觉得如果是多人联线的话,可以考虑用异步方法处理。哦,个人意见
      

  6.   

    这几天把那本关于jabber做的即时消息的代码看了一下,感觉还可以啊,他主要是用java实现,把那些登入,列出好友,删除等写成类,主要是居于xml通信,,那个交换信息都是用xml完成的.
    不知道大家有没有用过jabber,一起来学习啊!!!!!!!!1