自学内容网 自学内容网

《Java核心技术II》实现服务器

实现服务器

这节实现简单服务器,可以向客户端发送信息。

服务器套接字

ServerSocket用于建立套接字
var s = new ServerSocket(8189);
建立一个监听端口8189的服务器。
Socket incoming = s.accept();
此对象可以得到输入流和输出流。
InputStream inStream = incoming.getInputStream();
OutputStream outStream = incoming.getOutputStream();
示例来发送文本,将流转换为扫描器和写入器。
var in = new Scanner(inStream,StandardCharsets.UTF-8);
var out = new PrintWriter(new OutputStreamWriter(outStream,StandardCharsets.UTF-8),true);
给客户端发送一条问候信息:
out.println("你好!输入BYE关闭它。");
简单服务器程序中,只是读取客户端输入,每次读一行,并回送这一行。
实际中是要经过处理的。
String line = in.nextLine();
out.println("回复:"+line);
if(line.strip().equals("BYE")) done = true;
代码最后,关闭连接进来的套接字。
incoming.close();
服务器回应案例
package 第4章网络.server;

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.nio.charset.StandardCharsets;
import java.util.Scanner;

public class EchoServer {

    public static void main(String[] args) throws IOException {

        try (var s = new ServerSocket(8189)) {
            try (Socket incoming = s.accept()) {
                InputStream inStream = incoming.getInputStream();
                OutputStream outStream = incoming.getOutputStream();
                try (var in = new Scanner(new InputStreamReader(inStream, StandardCharsets.UTF_8))) {
                    var out = new PrintWriter(new OutputStreamWriter(outStream, StandardCharsets.UTF_8), true);
                    out.println("你好!输入BYE关闭它。");
                    // 回应客户端的输入
                    boolean done = false;
                    while (!done && in.hasNextLine()) {
                        String line = in.nextLine();
                        System.out.println(line);
                        out.println("回应:" + line);
                        if (line.strip().equals("BYE")) {
                            done = true;
                        }
                    }
                }
            }
        }
    }

}

打开cmd,chcp 65001,更改代码为UTF-8
telenet ,进入交互界面
set localecho,本地输入回显出来
telnet进行访问
telnet localhost 8189
中文秒退 ,原因不详,待解决,英文没问题。
BYE关闭,服务器也终止运行。
比如HTTP web服务器,都会不间断执行下面这个循环
  • 通过输入数据流从客户端接收一个命令。
  • 解码这个客户端命令。
  • 收集客户端所请求的信息。
  • 通过输出数据流发送信息给客户端。

原文地址:https://blog.csdn.net/qq_36324341/article/details/145159324

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!