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(); } } } }