java版的QQ小程序

转载自:http://blog.csdn.net/lihongxun945/article/details/6114290

 

这是一个简单的java版的QQ小程序。

包括一个简单的服务器和一个简单的客户端。

运行时,先运行服务器,然后在运行客户端,就可以进行聊天了。

默认的配置是localhost,端口4545,更改ip就可以在两天电脑上进行聊天了。

目前不支持内网和外网之间的访问,也不支持多人聊天。

因为这只是一个简单的例子,感兴趣的同学可以通过改进,实现多人聊天和内外网之间的访问。

 

效果图:

 

下载地址:http://download.csdn.net/source/2958843

 

源代码:

QQServer.java

 

[java] view plaincopy
 
  1. //axun @copy right  
  2. package axun.com;  
  3. import java.io.BufferedReader;  
  4. import java.io.DataInputStream;  
  5. import java.io.DataOutputStream;  
  6. import java.io.InputStream;  
  7. import java.io.OutputStream;  
  8. import java.net.ServerSocket;  
  9. import java.net.Socket;  
  10. import java.awt.*;  
  11. import java.awt.event.*;  
  12. import javax.swing.*;  
  13. public class QQServer{  
  14.     private JFrame f=new JFrame("QQ服务器端");  
  15.     private JPanel pleft=new JPanel(new BorderLayout());  
  16.     private JPanel pright=new JPanel();  
  17.     private List list=new List();  
  18.     private TextArea t1=new TextArea();  
  19.     private TextArea t2=new TextArea();  
  20.     private Button b=new Button("发送");  
  21.       
  22.     //一下是 网络通信用的变量  
  23.     DataOutputStream dos=null;  
  24.     BufferedReader br=null;  
  25.     DataInputStream dis=null;  
  26.       
  27.     public QQServer(){  
  28.         f.setSize(400,300);  
  29.         f.setLayout(new BorderLayout());  
  30.         f.add(pleft,BorderLayout.WEST);  
  31.         f.add(pright,BorderLayout.CENTER);  
  32.           
  33.         pleft.add(list);  
  34.           
  35.         pright.setLayout(new GridLayout(3,1));  
  36.         pright.add(t1);  
  37.         pright.add(t2);  
  38.         pright.add(b);  
  39.           
  40.         f.setVisible(true);  
  41.         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  42.         b.addActionListener(new bListener());  
  43.     }  
  44.       
  45.     public void Addt1(String s){  
  46.         t1.append(s);  
  47.     }  
  48.       
  49.     public void addList(String s){  
  50.         list.addItem(s);  
  51.     }  
  52.       
  53.     public static void main(String[] args) throws Exception{  
  54.         QQServer server=new QQServer();  
  55.           
  56.         InputStream in=null;  
  57.         OutputStream out=null;  
  58.         String string=null;   
  59.           
  60.         ServerSocket ss=new ServerSocket(4545);  
  61.         Socket s=null;  
  62.           
  63.         s=ss.accept();  
  64.         server.addList(s.toString());  
  65.         in=s.getInputStream();  
  66.         out=s.getOutputStream();  
  67.           
  68.         server.dis=new DataInputStream(in);  
  69.         server.dos=new DataOutputStream(out);  
  70.           
  71.         Listen1 l=new Listen1(server,server.dis);  
  72.         Thread t=new Thread(l);  
  73.         t.start();  
  74.       
  75.           
  76.     }  
  77.       
  78.     class bListener implements ActionListener{  
  79.         public void actionPerformed(ActionEvent e) {  
  80.             try{  
  81.                 dos.writeUTF(t2.getText());  
  82.                   
  83.                 Addt1("发送:"+"/n");  
  84.                 Addt1("    "+t2.getText()+"/n");  
  85.                 t2.setText("");  
  86.             }catch(Exception ep){  
  87.                 Addt1("消息发送失败!/n");  
  88.             }  
  89.         }  
  90.     }  
  91. }  
  92. class Listen1 implements Runnable{  
  93.           
  94.         private QQServer server=null;  
  95.         private DataInputStream dis=null;  
  96.         private String s=null;  
  97.           
  98.         Listen1(QQServer server,DataInputStream dis){  
  99.             this.server=server;  
  100.             this.dis=dis;  
  101.         }  
  102.         public void run() {  
  103.             // TODO Auto-generated method stub  
  104.             try{  
  105.                 while(true){  
  106.                     s=dis.readUTF();  
  107.                     server.Addt1("收到:"+"/n");  
  108.                     server.Addt1("    "+s+"/n");  
  109.                 }  
  110.             }catch(Exception e){  
  111.                 server.Addt1("Error!:"+s+"/n");  
  112.             }  
  113.         }  
  114.     }  
  115.       
  116.           

 

 

QQClient.java

 

[java] view plaincopy
 
  1. //axun @copy right  
  2. package axun.com;  
  3. import java.io.BufferedReader;  
  4. import java.io.DataInputStream;  
  5. import java.io.DataOutputStream;  
  6. import java.io.InputStream;  
  7. import java.io.OutputStream;  
  8. import java.net.Socket;  
  9. import java.awt.*;  
  10. import javax.swing.*;  
  11. import java.awt.event.*;  
  12. public class QQClient {  
  13.     private JFrame f=new JFrame("QQ客户端");  
  14.     private TextArea t1=new TextArea();  
  15.     private TextArea t2=new TextArea();  
  16.     private Button b=new Button("发送");  
  17.       
  18.     //一下是 网络通信用的变量  
  19.     DataOutputStream dos=null;  
  20.     BufferedReader br=null;  
  21.     DataInputStream dis=null;  
  22.       
  23.       
  24.     public void Addt1(String s){  
  25.         t1.append(s);  
  26.     }  
  27.       
  28.     public QQClient(){  
  29.         f.setSize(400,300);  
  30.         f.setLayout(new GridLayout(3,1));  
  31.         t1.setEditable(false);  //不可编辑  
  32.         f.add(t1);  
  33.         f.add(t2);  
  34.         f.add(b);  
  35.         f.setVisible(true);  
  36.           
  37.         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  38.         b.addActionListener(new bListener());  
  39.     }  
  40.       
  41.     public static void main(String[] args) throws Exception {  
  42.         QQClient client=new QQClient();  
  43.         InputStream in=null;  
  44.         OutputStream out=null;  
  45.         String string=null;  
  46.           
  47.         Socket s=new Socket("localhost",4545);  
  48.         out=s.getOutputStream();  
  49.         in=s.getInputStream();  
  50.           
  51.         client.dis=new DataInputStream(in);  
  52.         client.dos=new DataOutputStream(out);  
  53.           
  54.         Listen2 l=new Listen2(client,client.dis);  
  55.         Thread t=new Thread(l);  
  56.         t.start();  
  57.           
  58.     }  
  59.       
  60.     class bListener implements ActionListener{  
  61.         public void actionPerformed(ActionEvent e) {  
  62.             try{  
  63.                   
  64.                 dos.writeUTF(t2.getText());  
  65.                 Addt1("发送:"+"/n");  
  66.                 Addt1("    "+t2.getText()+"/n");  
  67.                 t2.setText("");  
  68.             }catch(Exception ep){  
  69.                   
  70.             }  
  71.         }  
  72.     }  
  73. }  
  74. class Listen2 implements Runnable{  
  75.           
  76.         private QQClient client=null;  
  77.         private DataInputStream dis=null;  
  78.         private String s=null;  
  79.           
  80.         Listen2(QQClient client,DataInputStream dis){  
  81.             this.client=client;  
  82.             this.dis=dis;  
  83.         }  
  84.         public void run() {  
  85.             // TODO Auto-generated method stub  
  86.             try{  
  87.                 while(true){  
  88.                     s=dis.readUTF();  
  89.                     client.Addt1("收到:"+"/n");  
  90.                     client.Addt1("    "+s+"/n");  
  91.                 }  
  92.             }catch(Exception e){  
  93.                   
  94.             }  
  95.         }  
  96.     }  

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。