Board logo

標題: server and client [打印本頁]

作者: 零售商    時間: 2012-3-30 21:32     標題: server and client

本帖最後由 零售商 於 2012-3-31 15:05 編輯

有些地方還沒有搞懂,此程式參照:巨匠電腦花蓮分校java ocjp實做班,範例
  1. import java.net.*;
  2. import java.io.*;
  3. import java.util.*;
  4. public class MSNServer {
  5.     public static Vector v = new Vector();
  6. public MSNServer() {
  7.     }
  8. public static void main(String[] args) throws IOException{
  9.     ServerSocket ss = new ServerSocket(8080);
  10.     while(true){
  11.         Socket cs = ss.accept();
  12.         GetConnect gc = new GetConnect(cs , v);
  13.         Thread t = new Thread(gc);
  14.         t.start();
  15.     }
  16.     }
  17.    
  18. }
  19. class GetConnect implements Runnable {
  20.     GetConnect(Socket cs , Vector v){
  21.         this.cs = cs;
  22.         this.v = v;
  23.     }
  24.     private Socket cs;
  25.     private Vector v;
  26.     BufferedReader br;
  27.     PrintWriter out;
  28.     String name = "";
  29.     String getMsg2;
  30.     public void run(){
  31.         try{
  32.             br = new BufferedReader(new InputStreamReader(cs.getInputStream()));
  33.             out = new PrintWriter(cs.getOutputStream() , true);
  34.             out.println("歡迎光臨");
  35.             out.println("請輸入暱稱:");
  36.             v.add(this);
  37.             name = br.readLine();
  38.             SendMsg("In");
  39.             while(true){
  40.                 String getMsg = br.readLine();
  41.                 SendMsg(getMsg);   
  42.                 if(getMsg == null){
  43.                     br.close();
  44.                     break;                    
  45.                 }   
  46.             }
  47.             cs.close();
  48.             ExitConnect();
  49.         }
  50.         catch(IOException ie){
  51.             
  52.         }
  53.     }
  54.     void SendMsg(String getMsg) {
  55.         try{
  56.             ListIterator it = v.listIterator();
  57.             while(it.hasNext()){
  58.                 getMsg2 = getMsg;
  59.                 GetConnect gc = (GetConnect)it.next();
  60.                 PrintWriter pw = new PrintWriter(gc.cs.getOutputStream() , true);
  61.                 if(getMsg2 == "In")
  62.                     getMsg2 = name + "已登入";
  63.                 else if(getMsg2 == "Out")
  64.                     getMsg2 = name + "已登出";
  65.                 else
  66.                     getMsg2 = name + "說:" + getMsg2;
  67.                 pw.println(getMsg2);
  68.             }
  69.                 System.out.println(getMsg2);
  70.         }
  71.         catch(IOException ie){
  72.             
  73.         }
  74.     }
  75.     void ExitConnect(){
  76.         v.remove(this);
  77.         SendMsg("Out");
  78.     }
  79. }
複製代碼
  1. import java.awt.*;
  2. import javax.swing.*;
  3. import java.util.*;
  4. import java.net.*;
  5. import java.io.*;
  6. import java.awt.event.*;
  7. public class MSNClient {
  8. public MSNClient() {
  9.     }
  10. public static void main(String[] args) {
  11. MSNMessage m = new MSNMessage();
  12.     }
  13.    
  14. }
  15. class MSNMessage implements KeyListener {
  16.     JFrame jfMSN = new JFrame("即時通訊");
  17.     TextArea taList = new TextArea(10,30);
  18.     JPanel jp = new JPanel();
  19.     JTextField jtfSend = new JTextField();
  20.     BufferedReader br;
  21.     PrintWriter pw;
  22.     boolean UserIn = false;
  23.     MSNMessage(){
  24.     Container c = jfMSN.getContentPane();
  25.     jfMSN.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  26.     c.setLayout(new BorderLayout());
  27.     jfMSN.setLocation(300,200);
  28.     jfMSN.setSize(500,500);
  29.     taList.setFont(new Font("新細明體",Font.BOLD,24));
  30.     taList.setFocusable(false);
  31.     jtfSend.setFont(new Font("新細明體",Font.BOLD,24));
  32.     jp.setBorder(BorderFactory.createTitledBorder("請輸入傳送的訊息:(按 Enter 送出)"));
  33.     jp.setLayout(new GridLayout(1,1));
  34.     jp.add(jtfSend);
  35.     c.add("Center",taList);
  36.     c.add("South",jp);
  37.     jtfSend.addKeyListener(this);
  38.     jfMSN.setVisible(true);
  39.     try{
  40.         Socket s = new Socket();
  41.         s.bind(null);
  42.         s.connect(new InetSocketAddress("192.168.1.68",8080),1000);
  43.         br = new BufferedReader (new InputStreamReader(s.getInputStream()));
  44.         pw = new PrintWriter(s.getOutputStream(),true);
  45.         while(true){
  46.             String getMsg = br.readLine();
  47.             taList.append(getMsg + "\n");
  48.         }
  49.     }
  50.     catch(Exception e){
  51.         
  52.     }

  53.     }
  54.     public void keyPressed(KeyEvent ke){
  55.         if(ke.getKeyCode() == 10){
  56.             pw.println(jtfSend.getText());
  57.             if(UserIn == false){
  58.                 jfMSN.setTitle("即時通訊 目前使用者:" + jtfSend.getText());
  59.                 UserIn = true;
  60.             }
  61.             jtfSend.setText("");
  62.         }
  63.     }
  64.     public void keyTyped(KeyEvent ke){
  65.         
  66.     }
  67.     public void keyReleased(KeyEvent ke){
  68.         
  69.     }
  70. }
複製代碼

作者: waynechen251    時間: 2012-5-27 16:58

你要不要用java寫要地聊天室呢= =
作者: 零售商    時間: 2012-5-27 18:00

回復 2# waynechen251
網頁語法我沒有學欸...這是程式的
作者: waynechen251    時間: 2012-7-31 23:01

至於如何將程式碼封裝成軟體你可不可以教導我?




歡迎光臨 戰略要地 (http://urbase.net/bbs2/) Powered by Discuz! 7.2