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

news/2025/1/16 16:25:48/

实现服务器

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

服务器套接字

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();
服务器回应案例
java">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.ppmy.cn/news/1563655.html

相关文章

LabVIEW光流算法的应用

该VI展示了如何使用NI Vision Development Module中的光流算法来计算图像序列中像素的运动矢量。通过该方法,可以实现目标跟踪、运动检测等功能,适用于视频处理、机器人视觉和监控领域。程序采用模块化设计,包含图像输入、算法处理、结果展示…

【DevOps】Pipeline功能语法

Pipeline功能语法 一、options全局配置 # 在pipeline下一层添加即可 options {timestamps () // 打印日志时间timeout(time: 10, unit: MINUTES) // 设置流水线执行超时时间 天(DAYS) 时(HOURS) 分钟(MINUTES) 秒(SECONDS)}二、tools全局工具 tools { maven "M…

redis监控会不会统计lua里面执行的命令次数

问题:redis lua里面执行的命令会不会计算到监控的qps中 假设: lua 脚本中对数据库操作了1w次。 执行一次lua 脚本, 虽然内部对数据库操作了1w次, 但是从redis 监控上看只是执行了一次lua脚本, lua内部对数据库的1w次不…

小程序如何引入腾讯位置服务

小程序如何引入腾讯位置服务 1.添加服务 登录 微信公众平台 注意:小程序要企业版的 第三方服务 -> 服务 -> 开发者资源 -> 开通腾讯位置服务 在设置 -> 第三方设置 中可以看到开通的服务,如果没有就在插件管理中添加插件 2.腾讯位置服务…

(STM32笔记)十二、DMA的基础知识与用法 第二部分

我用的是正点的STM32F103来进行学习,板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话,用的也是这个板子和教程。 DMA的基础知识与用法 二、DMA传输设置1、数据来源与数据去向外设到存储器存储器到外设存储器到存储器 2、每次传输大小3、传…

网络层协议-----IP协议

目录 1.认识IP地址 2.IP地址的分类 3.子网划分 4.公网IP和私网IP 5.IP协议 6.如何解决IP地址不够用 1.认识IP地址 IP 地址(Internet Protocol Address)是指互联网协议地址。 它是分配给连接到互联网的设备(如计算机、服务器、智能手机…

lqb.key按键全套

#include "stc15.h" #define FOSC 11059200L //#define T1MS (65536-FOSC/1000) //1T模式 #define T1MS (65536-FOSC/12/1000) //12T模式typedef unsigned char u8; typedef unsigned int u16; typedef unsigned long u32;#define LY 1 //…

C语言数据结构与算法(排序)详细版

大家好,欢迎来到“干货”小仓库!! 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!无人扶我青云志,我自踏雪至山巅!!&am…