1. 程式人生 > >java開發實戰1200例(II)--------313使用socket通訊

java開發實戰1200例(II)--------313使用socket通訊

//伺服器Frame

package ServerClientTest;

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.print.Printable; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket;

import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField;

public class ServerSocketFrame extends JFrame {     private JTextArea ta_info;     private JTextField tf_send;     private JScrollPane scroll;     private JLabel label;     private BufferedReader reader;     private PrintWriter writer;     private ServerSocket server;     private Socket socket;     private JPanel panel;     public ServerSocketFrame(){         label=new JLabel("伺服器傳送的資訊:");         tf_send=new JTextField("",20);         panel=new JPanel();         panel.add(label);         panel.add(tf_send);         add(panel,BorderLayout.NORTH);                  ta_info=new JTextArea(8,20);         scroll=new JScrollPane(ta_info);         add(scroll,BorderLayout.CENTER);                  getServer();                  tf_send.addActionListener(new ActionListener(){             public void actionPerformed(ActionEvent e){                 writer.println(tf_send.getText());                 ta_info.append("伺服器傳送的資訊是:"+tf_send.getText()+"\n");                 tf_send.setText("");             }         });         pack();     }     public void getServer(){         new Thread(){             public void run(){             try {                 server=new ServerSocket(1982);                 ta_info.append("伺服器套接字建立成功!\n");                 while(true){                     ta_info.append("等待連結……\n");                     socket=server.accept();                     ta_info.append("連結成功!\n");                     reader=new BufferedReader(new InputStreamReader                             (socket.getInputStream()));                     writer=new PrintWriter(socket.getOutputStream(),true);                     getClientInfo();                 }             } catch (IOException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }             }                      }.start();     }     private void getClientInfo(){         try{             while(true){                 String line=reader.readLine();                 if(line!=null){                     ta_info.append("接收到客戶機發送的資訊: "+line+"\n");                 }             }         }catch(Exception e){             ta_info.append("客戶端已推出、\n");         }finally{             try{                 if(reader!=null)                     reader.close();                 if(socket!=null)                     socket.close();             }catch(IOException e){                 e.printStackTrace();             }         }     }

}

//客戶端Frame

package ServerClientTest;

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException;

import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField;

public class ClientSocketFrame extends JFrame {

    private JTextArea ta_info;     private JTextField tf_send;     private JScrollPane scroll;     private JPanel panel;     private Socket socket;     private JLabel label;     private BufferedReader reader;     private PrintWriter writer;          public ClientSocketFrame(){         label=new JLabel("客戶端傳送資訊:");         tf_send=new JTextField("",20);         panel=new JPanel();         panel.add(label);         panel.add(tf_send);         add(panel,BorderLayout.NORTH);                  ta_info=new JTextArea(8,20);         scroll=new JScrollPane(ta_info);         add(scroll,BorderLayout.CENTER);         tf_send.addActionListener(new ActionListener(){             public void actionPerformed(ActionEvent e){                 writer.println(tf_send.getText());                 ta_info.append("客戶端傳送的資訊是:"+tf_send.getText()+"\n");                 tf_send.setText("");             }         });         connect();         pack();              }     private void connect(){         new Thread(){             public void run(){         ta_info.append("嘗試連線……\n");         try {             socket=new Socket("10.2.110.86",1982);             ta_info.append("連結成功!\n");             while(true){                 reader=new BufferedReader(new InputStreamReader                         (socket.getInputStream()));                 writer=new PrintWriter(socket.getOutputStream(),true);                 getClientInfo();             }         } catch (UnknownHostException e) {             // TODO Auto-generated catch block             e.printStackTrace();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }             }         }.start();     }          private void getClientInfo(){         try{             while(true){                 if(reader!=null){                     String line=reader.readLine();                     if(line!=null){                         ta_info.append("接收到伺服器傳送的資訊:"+line+"\n");                         tf_send.setText("");                     }                 }             }         }catch(Exception e){             e.printStackTrace();         }finally{             try{                 if(reader!=null){                     reader.close();                 }if(socket!=null){                     socket.close();                 }             }catch(IOException e){                 e.printStackTrace();             }         }     } }