qq实现原理 大家可以介绍一下qq实现原理吗???用java vc都能实现吗???? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参考LumaQQ有个毛的过用参考LIUNX可以说是盗版WINDOWS的. 虽然说是国产的但是谁会用这个系统.嘿嘿.我用过几次.全是代码操作.我都还不知道我些的这个名字是不是对的也.很久都没有接到个参考LumaQQ 我也猜测一下,比较同意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 Socketimport 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端口做为服务端口,客户端则向此端口请求服务,剩下的就发挥你的想像吧这只是用来测试用的,所以比较简单。 用gaim在google一搜就有有qq插件,很有参考意义 不知道大家有没有用过jabber做服务器做那个,这几天看了一下书觉的那个还可以啊 beebon用的是同步的,其实我觉得如果是多人联线的话,可以考虑用异步方法处理。哦,个人意见 这几天把那本关于jabber做的即时消息的代码看了一下,感觉还可以啊,他主要是用java实现,把那些登入,列出好友,删除等写成类,主要是居于xml通信,,那个交换信息都是用xml完成的.不知道大家有没有用过jabber,一起来学习啊!!!!!!!!1 一道排序算法题,求解 求数组的众数 说出ArrayList,Vector, LinkedList的存储性能和特性 这段代码有什么问题?维持一个多线程访问的队列Object.wait()和Object.notifyAll() 我的application中如何显示html页面 JSP 菜鸟问题 急!!!请大家帮助 希望得到大家的指点提供思路和方法!!!!!!!!!!!!!! Java连接MySQL出现这个是神马问题? Ubuntu系统 java直接连接sqlserver时出现的问题 一个很简单的问题!大家接分吧 如何用java 画图? 关于对main函数理解上的问题
有个毛的过用参考LIUNX可以说是盗版WINDOWS的.
虽然说是国产的但是谁会用这个系统.嘿嘿.我用过几次.全是代码操作.我都还不知道我些的这个名字是不是对的也.很久都没有接到个参考LumaQQ
器吧,总之只是客户和服务器的通信相对简单些,主要是要解决客户与客户间的通信,这还是要依靠服务器来协调,给个较简单的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端口做为服务端口,客户端则向此端口请求服务,剩下的就发挥你的想像吧这只是用来测试用的,所以比较简单。
在google一搜就有
有qq插件,很有参考意义
不知道大家有没有用过jabber,一起来学习啊!!!!!!!!1