Java简单的客户端与服务器的建立与通信

来源:互联网 发布:因扎吉数据 编辑:程序博客网 时间:2024/05/15 06:08

简述:

建立简单的server与client,在利用socket上通信


知识点:

1. java socket 通信

2. java GUI的几个控件

3. 多线程并发


代码:

SimpleChatServer.java

[java] view plaincopy
  1. package test.chatclient;  
  2.   
  3. import java.io.*;  
  4. import java.net.*;  
  5. import java.util.*;  
  6.   
  7. public class SimpleChatServer {  
  8.     ArrayList<PrintWriter> clientOutputStreams;  
  9.     public static void main(String[] args){  
  10.         new SimpleChatServer().go();  
  11.     }  
  12.       
  13.     public class ClientHandler implements Runnable{  
  14.         BufferedReader reader;  
  15.         Socket sock;  
  16.         public ClientHandler(Socket clientSocket){  
  17.             try{  
  18.                 sock = clientSocket;  
  19.                 InputStreamReader isReader = new InputStreamReader(sock.getInputStream());  
  20.                 reader = new BufferedReader(isReader);  
  21.             }catch(Exception ex){  
  22.                 ex.printStackTrace();  
  23.             }  
  24.         }  
  25.         @Override  
  26.         public void run() {  
  27.             String message;  
  28.             try{  
  29.                 while((message = reader.readLine()) != null){  
  30.                     System.out.println("read " + message);  
  31.                     tellEveryone(message);  
  32.                 }  
  33.             }catch(Exception ex){  
  34.                 ex.printStackTrace();  
  35.             }  
  36.         }  
  37.     }  
  38.       
  39.     public void tellEveryone(String message){  
  40.         Iterator<PrintWriter> it = clientOutputStreams.iterator();  
  41.         while(it.hasNext()){  
  42.             try{  
  43.                 PrintWriter writer = (PrintWriter)it.next();  
  44.                 writer.println(message);  
  45.                 writer.flush();  
  46.             }catch(Exception ex){  
  47.                 ex.printStackTrace();  
  48.             }  
  49.         }  
  50.     }  
  51.       
  52.     public void go(){  
  53.         clientOutputStreams = new ArrayList<PrintWriter>();  
  54.         try{  
  55.             ServerSocket serverSock = new ServerSocket(5000);  
  56.             while(true){  
  57.                 Socket clientSocket = serverSock.accept();  
  58.                 PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());  
  59.                 clientOutputStreams.add(writer);  
  60.                 Thread t = new Thread(new ClientHandler(clientSocket));  
  61.                 t.start();  
  62.                 System.out.println("got a connection");  
  63.             }  
  64.         }catch(Exception ex){  
  65.             ex.printStackTrace();  
  66.         }  
  67.     }  
  68. }  

SimpleChatClient.java

[java] view plaincopy
  1. package test.chatclient;  
  2. import java.io.*;  
  3. import java.net.*;  
  4. import javax.swing.*;  
  5. import java.awt.*;  
  6. import java.awt.event.*;  
  7. import javax.swing.JOptionPane;  
  8.   
  9. public class SimpleChatClient {  
  10.     JTextArea incoming;  
  11.     JTextField outgoing;  
  12.     BufferedReader reader;  
  13.     PrintWriter writer;  
  14.     Socket sock;  
  15.     static String clientName;  
  16.   
  17.     public static void main(String[] args) {  
  18.         SimpleChatClient client = new SimpleChatClient();  
  19.         clientName = JOptionPane.showInputDialog("Please input the client name :");  
  20.         client.go();  
  21.     }  
  22.   
  23.     public void go() {  
  24.         // build GUI  
  25.         JFrame frame = new JFrame(clientName + "'s Chat Client");  
  26.         JPanel mainPanel = new JPanel();  
  27.         incoming = new JTextArea(15,20);    
  28.         incoming.setLineWrap(true);  
  29.         incoming.setWrapStyleWord(true);  
  30.         incoming.setEditable(false);  
  31.   
  32.         JScrollPane qScroller = new JScrollPane(incoming);  
  33.         qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);  
  34.         qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);  
  35.   
  36.         outgoing = new JTextField(20);  
  37.   
  38.         JButton sendButton = new JButton("Send");  
  39.         sendButton.addActionListener(new SendButtonListener());  
  40.   
  41.         mainPanel.add(qScroller);  
  42.         mainPanel.add(outgoing);  
  43.         mainPanel.add(sendButton);  
  44.   
  45.         setUpNetworking();  
  46.         Thread readerThread = new Thread(new IncomingReader());  
  47.         readerThread.start();  
  48.   
  49.         frame.getContentPane().add(BorderLayout.CENTER, mainPanel);  
  50.         frame.setSize(400,500);  
  51.         frame.setVisible(true);  
  52.   
  53.     } // close go  
  54.   
  55.     private void setUpNetworking() {   
  56.         try {  
  57.             sock = new Socket("127.0.0.1"5000);  
  58.             InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());  
  59.             reader = new BufferedReader(streamReader);  
  60.   
  61.             writer = new PrintWriter(sock.getOutputStream());  
  62.   
  63.             System.out.println("networking established");  
  64.         } catch(IOException ex) {  
  65.             ex.printStackTrace();  
  66.         }  
  67.     } // close setUpNetworking    
  68.   
  69.     public class SendButtonListener implements ActionListener {  
  70.         public void actionPerformed(ActionEvent ev) {  
  71.             try {  
  72.                 writer.println(clientName+" says:\n"+outgoing.getText());  
  73.                 writer.flush();  
  74.             } catch(Exception ex) {  
  75.                 ex.printStackTrace();  
  76.             }  
  77.             outgoing.setText("");  
  78.             outgoing.requestFocus();  
  79.         }  
  80.     }  // close SendButtonListener inner class  
  81.   
  82.     public class IncomingReader implements Runnable {  
  83.         public void run() {  
  84.             String message = null;              
  85.             try {  
  86.                 while ((message = reader.readLine()) != null) {                         
  87.                     System.out.println("read " + message);  
  88.                     incoming.append(message + "\n");  
  89.                 } // close while  
  90.             } catch(Exception ex) {ex.printStackTrace();}  
  91.         } // close run  
  92.     } // close inner class      
  93. }  

输出:


原文链接:http://blog.csdn.net/anialy/article/details/7908077

0 0
原创粉丝点击