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í)專欄