当前位置: 首页 > article >正文

《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服务器,都会不间断执行下面这个循环
  • 通过输入数据流从客户端接收一个命令。
  • 解码这个客户端命令。
  • 收集客户端所请求的信息。
  • 通过输出数据流发送信息给客户端。

http://www.kler.cn/a/505195.html

相关文章:

  • 自建RustDesk服务器
  • 【论文阅读】SDA-FC: Bridging federated clustering and deep generative model
  • C++实现设计模式---备忘录模式 (Memento)
  • 开源项目stable-diffusion-webui部署及生成照片
  • ffmpeg 编译遇到的坑
  • 标准Android开发jdk和gradle和gradle AGP和AndroidStudio对应版本
  • vue3 父组件调用子组件方法
  • 在 WSL Ubuntu 上安装 ProxySQL 并配置 主从同步,读写分离,延迟检测
  • C++并发编程之掩藏任务延迟与提高响应性的应用说明
  • Windows MFC 管理员权限DragAcceptFiles无效 处理方法
  • JavaSwing游戏开发之Camera原理
  • Java 输入输出流(上)
  • Gitlab流水线配置
  • Java 后端整合 Swagger + Knife4j 接口文档
  • 学员答疑:安卓分屏窗口的TouchableRegion设置流程追踪
  • 【STM32】存储分析深入——堆栈与map文件
  • C++进阶(四)--set和map的介绍与使用
  • 【落羽的落羽 C语言篇】文件操作
  • stack_queue的底层,模拟实现,deque和priority_queue详解
  • 深入探讨DICOM医学影像中的MPPS服务及其具体实现
  • 【原创】大数据治理入门(4)《保护数据隐私:大数据治理的最佳实践》入门必看 高赞实用
  • 战场物联网:通信挑战与最新解决方案综述
  • BUUCTF[ACTF新生赛2020]easyre
  • ubuntu22.04:解决google chrome 访问百度页面加载慢的问题
  • C++ 并发编程之std::find的并发版本
  • centos使用dpdk库