`

server/client端通信

    博客分类:
  • java
阅读更多
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author max
 */
public class Server1 {


    public static void main(String[] args) throws IOException
    {
        int port = 8821;
        
        ServerSocket serverSocket = new ServerSocket(port);
        ExecutorService exe = Executors.newFixedThreadPool(   //只有一个ExecutorService,执行
                             Runtime.getRuntime().availableProcessors()*10);
         while(true)
        {
             Socket socket = serverSocket.accept();
             exe.execute(getTask(socket)); //开启多个线程
        }
 
    }

    public static Runnable getTask(final Socket s)
    {
        return new Runnable(){

            private BufferedReader br = null;
            private PrintWriter pw = null;
            private Socket socket = null;

            public void run() {
                try {
                    this.socket = s; //socket可以传递
                    System.out.println("接收到客户端的数据");
                    br = getReader(socket);
                    pw = getWriter(socket);
                    //从客户端读
                    String msg = null;
                   
                    while (( msg = br.readLine()) != null) {
                        System.out.println(msg);
                        if(msg.equals("bye"))  //注意,没有这句不能退出while
                            break;
                    }
                    //向客户端写
                    pw.println("数据正确");
                } catch (IOException ex) {
                    Logger.getLogger(Server1.class.getName()).log(Level.SEVERE, null, ex);
                } finally {
                    try {
                        if(socket!=null)
                        socket.close();
                    } catch (IOException ex) {
                        Logger.getLogger(Server1.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }

            //从客户端读数据
            private BufferedReader getReader(Socket socket) throws IOException {
                InputStream input = socket.getInputStream();
                return new BufferedReader(new InputStreamReader(input));
            }

            //向客户端写数据
            private PrintWriter getWriter(Socket socket) throws IOException {
                OutputStream output = socket.getOutputStream();
                return new PrintWriter(new OutputStreamWriter(output),true);//注意true是提醒刷新
            }

        };
    }
}

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author max
 */
public class Client1 {

    public static void main(String[] args)
    {
        int numTask = 10;
        ExecutorService exec = Executors.newCachedThreadPool();
        for(int i = 0;i < numTask;i++)
        {
            exec.execute(createTask(i));
        }
    }

    public static Runnable createTask(int taskID)
    {
        return new Runnable(){
            private int port = 8821;
            private Socket socket = null;

            public void run(){

                try {
                    System.out.println("开始发送数据");
                    socket = new Socket("localhost", port);
                    OutputStream socketOut = socket.getOutputStream();
                    socketOut.write("你好,你是谁\r\n".getBytes());
                    socketOut.write("bye\r\n".getBytes());

                    InputStream socketInput = socket.getInputStream();
                    BufferedReader br = new BufferedReader(new InputStreamReader(socketInput));
                    String msg = null;
                    while((msg = br.readLine())!= null)
                    {
                        System.out.println(msg);
                    }
                } catch (UnknownHostException ex) {
                    Logger.getLogger(Client1.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Client1.class.getName()).log(Level.SEVERE, null, ex);
                }


            }
        };
    }
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics