您的位置:首页 > 编程语言 > Java开发

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

2015-11-04 15:55 483 查看
简述:

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

知识点:

1. java socket 通信

2. java GUI的几个控件

3. 多线程并发

代码:

SimpleChatServer.java

[java] view
plaincopy

package test.chatclient;  

  

import java.io.*;  

import java.net.*;  

import java.util.*;  

  

public class SimpleChatServer {  

    ArrayList<PrintWriter> clientOutputStreams;  

    public static void main(String[] args){  

        new SimpleChatServer().go();  

    }  

      

    public class ClientHandler implements Runnable{  

        BufferedReader reader;  

        Socket sock;  

        public ClientHandler(Socket clientSocket){  

            try{  

                sock = clientSocket;  

                InputStreamReader isReader = new InputStreamReader(sock.getInputStream());  

                reader = new BufferedReader(isReader);  

            }catch(Exception ex){  

                ex.printStackTrace();  

            }  

        }  

        @Override  

        public void run() {  

            String message;  

            try{  

                while((message = reader.readLine()) != null){  

                    System.out.println("read " + message);  

                    tellEveryone(message);  

                }  

            }catch(Exception ex){  

                ex.printStackTrace();  

            }  

        }  

    }  

      

    public void tellEveryone(String message){  

        Iterator<PrintWriter> it = clientOutputStreams.iterator();  

        while(it.hasNext()){  

            try{  

                PrintWriter writer = (PrintWriter)it.next();  

                writer.println(message);  

                writer.flush();  

            }catch(Exception ex){  

                ex.printStackTrace();  

            }  

        }  

    }  

      

    public void go(){  

        clientOutputStreams = new ArrayList<PrintWriter>();  

        try{  

            ServerSocket serverSock = new ServerSocket(5000);  

            while(true){  

                Socket clientSocket = serverSock.accept();  

                PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());  

                clientOutputStreams.add(writer);  

                Thread t = new Thread(new ClientHandler(clientSocket));  

                t.start();  

                System.out.println("got a connection");  

            }  

        }catch(Exception ex){  

            ex.printStackTrace();  

        }  

    }  

}  

SimpleChatClient.java

[java] view
plaincopy

package test.chatclient;  

import java.io.*;  

import java.net.*;  

import javax.swing.*;  

import java.awt.*;  

import java.awt.event.*;  

import javax.swing.JOptionPane;  

  

public class SimpleChatClient {  

    JTextArea incoming;  

    JTextField outgoing;  

    BufferedReader reader;  

    PrintWriter writer;  

    Socket sock;  

    static String clientName;  

  

    public static void main(String[] args) {  

        SimpleChatClient client = new SimpleChatClient();  

        clientName = JOptionPane.showInputDialog("Please input the client name :");  

        client.go();  

    }  

  

    public void go() {  

        // build GUI  

        JFrame frame = new JFrame(clientName + "'s Chat Client");  

        JPanel mainPanel = new JPanel();  

        incoming = new JTextArea(15,20);    

        incoming.setLineWrap(true);  

        incoming.setWrapStyleWord(true);  

        incoming.setEditable(false);  

  

        JScrollPane qScroller = new JScrollPane(incoming);  

        qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);  

        qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);  

  

        outgoing = new JTextField(20);  

  

        JButton sendButton = new JButton("Send");  

        sendButton.addActionListener(new SendButtonListener());  

  

        mainPanel.add(qScroller);  

        mainPanel.add(outgoing);  

        mainPanel.add(sendButton);  

  

        setUpNetworking();  

        Thread readerThread = new Thread(new IncomingReader());  

        readerThread.start();  

  

        frame.getContentPane().add(BorderLayout.CENTER, mainPanel);  

        frame.setSize(400,500);  

        frame.setVisible(true);  

  

    } // close go  

  

    private void setUpNetworking() {   

        try {  

            sock = new Socket("127.0.0.1", 5000);  

            InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());  

            reader = new BufferedReader(streamReader);  

  

            writer = new PrintWriter(sock.getOutputStream());  

  

            System.out.println("networking established");  

        } catch(IOException ex) {  

            ex.printStackTrace();  

        }  

    } // close setUpNetworking    

  

    public class SendButtonListener implements ActionListener {  

        public void actionPerformed(ActionEvent ev) {  

            try {  

                writer.println(clientName+" says:\n"+outgoing.getText());  

                writer.flush();  

            } catch(Exception ex) {  

                ex.printStackTrace();  

            }  

            outgoing.setText("");  

            outgoing.requestFocus();  

        }  

    }  // close SendButtonListener inner class  

  

    public class IncomingReader implements Runnable {  

        public void run() {  

            String message = null;              

            try {  

                while ((message = reader.readLine()) != null) {                         

                    System.out.println("read " + message);  

                    incoming.append(message + "\n");  

                } // close while  

            } catch(Exception ex) {ex.printStackTrace();}  

        } // close run  

    } // close inner class      

}  

输出:



原文链接:http://blog.csdn.net/anialy/article/details/7908077
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: