美文网首页
创建一个 BIO server

创建一个 BIO server

作者: leeehao | 来源:发表于2020-08-11 18:22 被阅读0次

在 Java 中使用 java.net.Socketjava.net.ServerSocket 操作套接字。

server

package bio;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class BioServer {

    private int port;

    public BioServer(int port) {
        this.port = port;
    }

    public void listen() throws IOException {
        try(ServerSocket server = new ServerSocket(this.port)) {
            for (;;) {
                acceptedSocket(server.accept());
            }
        }
    }

    private void acceptedSocket(Socket socket) {
        new Thread(() -> {
            try(Socket connectionSocket = socket) {
                //Create Input&Outputstreams for the connection
                InputStream inputToServer = connectionSocket.getInputStream();
                OutputStream outputFromServer = connectionSocket.getOutputStream();

                Scanner scanner = new Scanner(inputToServer, "UTF-8");
                PrintWriter serverPrintOut = new PrintWriter(new OutputStreamWriter(outputFromServer, "UTF-8"), true);

                serverPrintOut.println("Hello World! Enter Peace to exit.");

                //Have the server take input from the client and echo it back
                //This should be placed in a loop that listens for a terminator text e.g. bye
                boolean done = false;

                while(!done && scanner.hasNextLine()) {
                    String line = scanner.nextLine();
                    serverPrintOut.println("Echo from <Your Name Here> Server: " + line);

                    if(line.toLowerCase().trim().equals("peace")) {
                        done = true;
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
    }

    public static void main(String[] args) throws IOException {
        BioServer bioServer = new BioServer( 8080);
        bioServer.listen();
    }
}

client

public class Client {

    public static void main(String[] args) throws IOException {
        for (int i = 0; i < 2; i++) {
            new Thread(() -> {
                Socket socket = null;
                try {
                    socket = new Socket("127.0.0.1", 8080);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                Scanner scanner = null;
                try {
                    scanner = new Scanner(socket.getInputStream());
                } catch (IOException e) {
                    e.printStackTrace();
                }
                for (;;) {
                    try {
                        System.out.println("Server response: " + scanner.nextLine());
                        TimeUnit.MILLISECONDS.sleep(new Random().nextInt(500));
                        String message = Thread.currentThread().getName() + "\n";
                        socket.getOutputStream().write(message.getBytes());
                    } catch (IOException | InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();

        }
    }
}

相关文章

网友评论

      本文标题:创建一个 BIO server

      本文链接:https://www.haomeiwen.com/subject/vxiydktx.html