Java學習筆記_網路+多線程

來源:互聯網
上載者:User

標籤:127.0.0.1   ttext   setup   pen   visible   rpo   oid   arraylist   run   

支援同時收發的用戶端和伺服器端

用戶端

 1 import javax.swing.*; 2 import java.awt.*; 3 import java.io.*; 4 import java.net.*; 5 import java.awt.event.*; 6  7 public class ChatClient { 8     private JTextArea incoming; 9     private JTextField outgoing;10     private PrintWriter writer;11     private BufferedReader reader;12         13     public static void main(String[] args) {14         ChatClient client = new ChatClient();15         client.go();16     }17     18     private void go() {19         build_gui();20         setup_net();21     }22     23     private void build_gui() {24         JFrame frame = new JFrame("Chat Client");25         JPanel panel = new JPanel();26         27         incoming = new JTextArea(15, 50);28         incoming.setLineWrap(true);29         incoming.setWrapStyleWord(true);30         incoming.setEditable(false);31         JScrollPane qScroller = new JScrollPane(incoming);32         qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);33         qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);34         panel.add(incoming);35         36         outgoing = new JTextField(20);37         panel.add(outgoing);38         39         JButton button = new JButton("Send");40         button.addActionListener(new SendButtonListener());41         panel.add(button);42         43         frame.add(BorderLayout.CENTER, panel);44         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);45         frame.setSize(600, 400);        46         frame.setVisible(true);47     }48     49     public class SendButtonListener implements ActionListener {50         public void actionPerformed(ActionEvent a) {51             String msg = outgoing.getText();52             try {53                 writer.println(msg);54                 writer.flush();55             } catch (Exception ex) { ex.printStackTrace(); }56             outgoing.setText("");57             outgoing.requestFocus();58         }59     }60     61     class ReceiveThreadJob implements Runnable {62         public void run() {63             String msg;64             try {65                 while ( (msg = reader.readLine()) != null ) {66                     incoming.append(msg + "\n");67                 }68             } catch (IOException ex) { System.out.println("server disconnected"); }        69         }70     }71     72     private void setup_net() {73         try {74             Socket s = new Socket("127.0.0.1", 4242);75             writer = new PrintWriter(s.getOutputStream());76             InputStreamReader streamReader = new InputStreamReader( s.getInputStream() );77             reader = new BufferedReader( streamReader );    78 79             Runnable receive_thread_job = new ReceiveThreadJob();80             Thread receive_thread = new Thread( receive_thread_job );81             receive_thread.start();82             83         } catch (IOException ex) {84             ex.printStackTrace();85         }86     }87 }

伺服器端

 1 import java.io.*; 2 import java.net.*; 3 import java.util.ArrayList; 4  5 public class ChatServer { 6     BufferedReader reader; 7     ArrayList<PrintWriter> writer_array = new ArrayList<PrintWriter>(); 8  9     public static void main(String[] args) {10         ChatServer server = new ChatServer();11         server.go();12     }13     14     private void go() {15         setup_net();16     }17     18     private void setup_net() {19         try {20             ServerSocket serverSock = new ServerSocket(4242);21             while (true) {22                 Socket s = serverSock.accept();23                 System.out.println("client connected");24                 InputStreamReader streamReader = new InputStreamReader( s.getInputStream() );25                 reader = new BufferedReader( streamReader );                            26                 PrintWriter writer = new PrintWriter(s.getOutputStream());27                 writer_array.add(writer);                28                 Runnable server_proc_thread_job = new ServerProcThreadJob();29                 Thread server_proc = new Thread( server_proc_thread_job );30                 server_proc.start();31             }32         } catch (IOException ex) {33             ex.printStackTrace();34         }35     }36     37     class ServerProcThreadJob implements Runnable {38         public void run() {39             String msg;40             try {41                 while ( (msg = reader.readLine()) != null ) {42                     System.out.println(msg);43                     for ( PrintWriter writer: writer_array ) {44                         writer.println(msg);45                         writer.flush();46                     }47                 }48             } catch (IOException ex) { System.out.println("client disconnected"); }49         }50     }51 }

 

Java學習筆記_網路+多線程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.