qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Java版的QQ小程序

          這是一個簡單的java版的QQ小程序。
            包括一個簡單的服務器和一個簡單的客戶端。
            運行時,先運行服務器,然后在運行客戶端,就可以進行聊天了。
            默認的配置是localhost,端口4545,更改ip就可以在兩天電腦上進行聊天了。
            目前不支持內網和外網之間的訪問,也不支持多人聊天。
            因為這只是一個簡單的例子,感興趣的同學可以通過改進,實現多人聊天和內外網之間的訪問。
            效果圖:
            下載地址:http://download.csdn.net/source/2958843
            源代碼:
          QQServer.java
          //axun @copy right
          package axun.com;
          import java.io.BufferedReader;
          import java.io.DataInputStream;
          import java.io.DataOutputStream;
          import java.io.InputStream;
          import java.io.OutputStream;
          import java.net.ServerSocket;
          import java.net.Socket;
          import java.awt.*;
          import java.awt.event.*;
          import javax.swing.*;
          public class QQServer{
          private JFrame f=new JFrame("QQ服務器端");
          private JPanel pleft=new JPanel(new BorderLayout());
          private JPanel pright=new JPanel();
          private List list=new List();
          private TextArea t1=new TextArea();
          private TextArea t2=new TextArea();
          private Button b=new Button("發送");
          //一下是 網絡通信用的變量
          DataOutputStream dos=null;
          BufferedReader br=null;
          DataInputStream dis=null;
          public QQServer(){
          f.setSize(400,300);
          f.setLayout(new BorderLayout());
          f.add(pleft,BorderLayout.WEST);
          f.add(pright,BorderLayout.CENTER);
          pleft.add(list);
          pright.setLayout(new GridLayout(3,1));
          pright.add(t1);
          pright.add(t2);
          pright.add(b);
          f.setVisible(true);
          f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          b.addActionListener(new bListener());
          }
          public void Addt1(String s){
          t1.append(s);
          }
          public void addList(String s){
          list.addItem(s);
          }
          public static void main(String[] args) throws Exception{
          QQServer server=new QQServer();
          InputStream in=null;
          OutputStream out=null;
          String string=null;
          ServerSocket ss=new ServerSocket(4545);
          Socket s=null;
          s=ss.accept();
          server.addList(s.toString());
          in=s.getInputStream();
          out=s.getOutputStream();
          server.dis=new DataInputStream(in);
          server.dos=new DataOutputStream(out);
          Listen1 l=new Listen1(server,server.dis);
          Thread t=new Thread(l);
          t.start();
          }
          class bListener implements ActionListener{
          public void actionPerformed(ActionEvent e) {
          try{
          dos.writeUTF(t2.getText());
          Addt1("發送:"+"/n");
          Addt1("    "+t2.getText()+"/n");
          t2.setText("");
          }catch(Exception ep){
          Addt1("消息發送失敗!/n");
          }
          }
          }
          }
          class Listen1 implements Runnable{
          private QQServer server=null;
          private DataInputStream dis=null;
          private String s=null;
          Listen1(QQServer server,DataInputStream dis){
          this.server=server;
          this.dis=dis;
          }
          public void run() {
          // TODO Auto-generated method stub
          try{
          while(true){
          s=dis.readUTF();
          server.Addt1("收到:"+"/n");
          server.Addt1("    "+s+"/n");
          }
          }catch(Exception e){
          server.Addt1("Error!:"+s+"/n");
          }
          }
          }
           QQClient.java
          //axun @copy right
          package axun.com;
          import java.io.BufferedReader;
          import java.io.DataInputStream;
          import java.io.DataOutputStream;
          import java.io.InputStream;
          import java.io.OutputStream;
          import java.net.Socket;
          import java.awt.*;
          import javax.swing.*;
          import java.awt.event.*;
          public class QQClient {
          private JFrame f=new JFrame("QQ客戶端");
          private TextArea t1=new TextArea();
          private TextArea t2=new TextArea();
          private Button b=new Button("發送");
          //一下是 網絡通信用的變量
          DataOutputStream dos=null;
          BufferedReader br=null;
          DataInputStream dis=null;
          public void Addt1(String s){
          t1.append(s);
          }
          public QQClient(){
          f.setSize(400,300);
          f.setLayout(new GridLayout(3,1));
          t1.setEditable(false);  //不可編輯
          f.add(t1);
          f.add(t2);
          f.add(b);
          f.setVisible(true);
          f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          b.addActionListener(new bListener());
          }
          public static void main(String[] args) throws Exception {
          QQClient client=new QQClient();
          InputStream in=null;
          OutputStream out=null;
          String string=null;
          Socket s=new Socket("localhost",4545);
          out=s.getOutputStream();
          in=s.getInputStream();
          client.dis=new DataInputStream(in);
          client.dos=new DataOutputStream(out);
          Listen2 l=new Listen2(client,client.dis);
          Thread t=new Thread(l);
          t.start();
          }
          class bListener implements ActionListener{
          public void actionPerformed(ActionEvent e) {
          try{
          dos.writeUTF(t2.getText());
          Addt1("發送:"+"/n");
          Addt1("    "+t2.getText()+"/n");
          t2.setText("");
          }catch(Exception ep){
          }
          }
          }
          }
          class Listen2 implements Runnable{
          private QQClient client=null;
          private DataInputStream dis=null;
          private String s=null;
          Listen2(QQClient client,DataInputStream dis){
          this.client=client;
          this.dis=dis;
          }
          public void run() {
          // TODO Auto-generated method stub
          try{
          while(true){
          s=dis.readUTF();
          client.Addt1("收到:"+"/n");
          client.Addt1("    "+s+"/n");
          }
          }catch(Exception e){
          }
          }
          }

          posted on 2014-09-29 10:06 順其自然EVO 閱讀(263) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

          <2014年9月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 香港| 彭山县| 定州市| 句容市| 随州市| 新疆| 五台县| 开阳县| 毕节市| 汽车| 全州县| 平远县| 海淀区| 秀山| 习水县| 南和县| 陇川县| 武功县| 渝中区| 贵港市| 孟津县| 鄂尔多斯市| 梅河口市| 垣曲县| 洪雅县| 东乡县| 崇文区| 夏邑县| 四平市| 绥江县| 乌海市| 马关县| 女性| 山东省| 兴文县| 芒康县| 宣化县| 土默特左旗| 崇信县| 平谷区| 全椒县|