qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          Java版的QQ小程序

          這是一個(gè)簡單的java版的QQ小程序。
            包括一個(gè)簡單的服務(wù)器和一個(gè)簡單的客戶端。
            運(yùn)行時(shí),先運(yùn)行服務(wù)器,然后在運(yùn)行客戶端,就可以進(jìn)行聊天了。
            默認(rèn)的配置是localhost,端口4545,更改ip就可以在兩天電腦上進(jìn)行聊天了。
            目前不支持內(nèi)網(wǎng)和外網(wǎng)之間的訪問,也不支持多人聊天。
            因?yàn)檫@只是一個(gè)簡單的例子,感興趣的同學(xué)可以通過改進(jìn),實(shí)現(xiàn)多人聊天和內(nèi)外網(wǎng)之間的訪問。
            效果圖:
            下載地址: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服務(wù)器端");
          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("發(fā)送");
          //一下是 網(wǎng)絡(luò)通信用的變量
          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("發(fā)送:"+"/n");
          Addt1("    "+t2.getText()+"/n");
          t2.setText("");
          }catch(Exception ep){
          Addt1("消息發(fā)送失敗!/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("發(fā)送");
          //一下是 網(wǎng)絡(luò)通信用的變量
          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("發(fā)送:"+"/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) 評(píng)論(0)  編輯  收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄

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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 沅陵县| 西和县| 怀安县| 南开区| 嘉定区| 耿马| 余庆县| 米脂县| 沙田区| 怀远县| 台州市| 定安县| 三原县| 河津市| 商都县| 南开区| 迁安市| 克什克腾旗| 卢氏县| 建德市| 合肥市| 合作市| 易门县| 云和县| 大厂| 淮滨县| 杭锦后旗| 高陵县| 全南县| 锦屏县| 新绛县| 桂林市| 奈曼旗| 株洲县| 库尔勒市| 武城县| 遵义市| 嵩明县| 河津市| 嵊州市| 临颍县|