Kuangcp/JavaBase

View on GitHub
network/src/main/java/com/github/kuangcp/runable/GreetingServer.java

Summary

Maintainability
A
2 hrs
Test Coverage
package com.github.kuangcp.runable;

import lombok.extern.slf4j.Slf4j;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;
import java.util.Scanner;

/**
 * 服务器端
 * 输入线程阻塞的原因,不能同时收发,怎么处理?多线程?
 * 服务器不应该发出,而是做中转站
 */
@Slf4j
public class GreetingServer extends Thread {

    private ServerSocket serverSocket;

    public GreetingServer(int port) throws IOException {
        serverSocket = new ServerSocket(port);
        serverSocket.setSoTimeout(10000);
    }

    public void run() {
        while (true) {
            try {
                log.info("#####  Waiting for client on port " + serverSocket.getLocalPort() + "...");
                Socket server = serverSocket.accept();
                Scanner scanner = new Scanner(System.in);

                log.info("Just connected to " + server.getRemoteSocketAddress());
                DataInputStream in = new DataInputStream(server.getInputStream());
                log.info("接收到的:" + in.readUTF());
                // 对客户端发出的消息
                DataOutputStream out = new DataOutputStream(server.getOutputStream());

                while (true) {
                    String temp = scanner.nextLine();
                    log.info("input:" + temp);
                    out.writeUTF(temp);
                    if ("90".equals(temp)) {
                        break;
                    }

                }
                out.writeUTF(
                        "Thank you for connecting to " + server.getLocalSocketAddress() + "  Goodbye!");

                server.close();
            } catch (SocketTimeoutException s) {
                log.info("Socket timed out!");
                break;
            } catch (IOException e) {
                log.error("", e);
                break;
            }
        }
    }

    public static void main(String[] args) {
//      int port = Integer.parseInt(args[0]);
        int port = 10000;
        try {
            Thread t = new GreetingServer(port);
            t.start();
        } catch (IOException e) {
            log.error("", e);
        }
    }
}