Echo 程序模型|学习笔记

简介: 快速学习 Echo 程序模型

开发者学堂课程【Java 高级编程Echo 程序模型】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/20/detail/429


Echo 程序模型


TCP 程序的基本实现

TCP 的程序开发是网络程序的最基本的开发模型,其核心的特点是使用两个类实现数据的交互处理: ServerSocket  (服务器端)、Socket客户端

: ServerSocket Socket:

图片1.png

ServerSocket 的主要目的是设置服务器的监听端口,而 Socket 需要指明要连接的服务器地址与端口。

实现一个数据的最简单的操作如下:即: Echo 程序实现

图片2.png

范例:实现服务器端的定义

package cn.mldn.demo.server;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.Scanner;

public class EchoServer {

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

ServerSocket server=new ServerSocket(9999);//设置服务器端的监听端口

System.out.println("等待客户端连接............");

Socket client=server.accept();//有客户端连接

//首先需要先接收客户端发送来的信息,而后才可以将信息处理之后发送回客户端

Scanner scan = new Scanner(clien.getInputStream());//客户端输入流

scan. useDelimiter("\n");//设置分隔符

PrintWriter out=new PrintWriter(client.getOutputStream());//客户端输出流

boolean flag=true;//循环标记

while (f1ag) {

if(scan.hasNext()) { //现在有数据发送

String val = scan.next();//接收发送的数据if ("byebye".equalsIgnoreCase(va1)) {out.println("ByeByeBye....");

flag = false;//结束循环

}

else {

out.println("[ECHO]"+ val);

client.close();

server.close(;

 

注:如果此时需要对程序进行测试,最好的方法是直接使用.最好的方法是直接使用 telnet 命令完成,但是此命令在  windows7 已经变为了默认不开启状态,所以如果要想使用则必须单独启用此命令。

范例:客户端代码

package cn.mldn.demo.client;

import java.io.BufferedReader;

import java.io.InputStreamReader ;import java.net.Socket;

public class EchoClient (

private static final BufferedReader KEYBOARD_ INPUT = new BufferedReader(new InputStreamReader(Syspublic static void main(String[ ] args) throws Exception

Socket client = new Socket("localhost",9999);//定义服务器端的连接信息 

//现在的客户端需要有输入与输出的操作支持,所以依然要准备出Scanner与PrintWriter

Scanner scan = new Scanner(client. getInputStream());//接受服务器端的输入内容

PrintWriter out = new PrintWriter(client.getOutputStream());//向服务器端public String getString(String prompt) throws Exception {

System.out.print (prompt) ;

String str = KEYBOARD_ INPUT. readLine() ;

return str ;

if (scan. hasNext())  {//服务器端有回应了System.out.println(scan.next());

if ("byebye".equalsIgnoreCase(input)) {

flag

scan.close();

out.c1ose();

c1ient.close();

注:此时就实现了一个最基础的客户端与服务器端之间的数据通讯操作。

相关文章
|
2月前
|
人工智能 JSON 监控
阿里云可观测 2025 年 8 月产品动态
阿里云可观测 2025 年 8 月产品动态
141 24
R语言错误处理与调试:如何高效调试R代码
【8月更文挑战第28天】调试R代码是一项需要不断练习和提高的技能。通过理解常见的错误类型、使用`traceback()`查看错误路径、逐步执行代码、利用`tryCatch()`捕获和处理错误、设置更严格的警告级别、利用RStudio的调试工具以及编写可复现的示例,你可以更加高效地调试R代码,并快速解决遇到的问题。
|
存储 缓存 监控
X86架构服务器硬件设计
8月更文挑战第16天
530 0
|
存储 机器学习/深度学习 SQL
【Prompt Engineering:自我反思(Reflexion)】
自我反思(Reflexion)是一种通过语言反馈强化基于语言的智能体的新范式,无需微调模型即可提升其在决策、推理和编程等任务中的表现。该框架包括参与者(生成动作)、评估者(评分)和自我反思(生成反馈)三个部分,利用大语言模型生成具体反馈,帮助智能体从错误中快速学习,显著提高了多种任务的性能。
1342 2
【Prompt Engineering:自我反思(Reflexion)】
|
网络协议 Unix Linux
docker部署Portainer
Portainer可以在Docker上运行,而且部署起来非常简单 Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求
docker部署Portainer
|
消息中间件 数据库 RocketMQ
Springboot+RocketMQ通过事务消息优雅的实现订单支付功能
RocketMQ的事务消息,是指发送消息事件和其他事件需要同时成功或同时失败。比如银行转账, A银行的某账户要转一万元到B银行的某账户。A银行发送“B银行账户增加一万元”这个消息,要和“从A银 行账户扣除一万元”这个操作同时成功或者同时失败。RocketMQ采用两阶段提交的方式实现事务消息。
569 0
|
Linux Windows
Ffmpeg下载WINDOWS、MAC编译结果
Ffmpeg下载WINDOWS、MAC编译结果
244 0
Ffmpeg下载WINDOWS、MAC编译结果
|
网络协议 JavaScript 前端开发
面试周连续剧之奇葩遭遇
接着上一篇文章继续聊面试经历,通过前三天的面试经历,梳理总结一下,虽然拿到了三个offer,但是约过的面试还要继续,这是自己的原则,不能随便放别人鸽子,要有面试节操。在分享今天的面试经历的同时,顺便总结一下这几天面试遇到的各种奇葩遭遇,没有别的意思,只是单纯的分享一下,那么马上开启面试周的第四天吧。
184 1
面试周连续剧之奇葩遭遇
|
算法 搜索推荐 数据可视化
异动分析技术解决方案—异动归因之指标拆解
唯一不变的是变化, 在拥抱它前,请事先探知、归因、并充分准备。 在相对完善的指标体系建设背景下,我们需要通过指标以及指标波动的解读来描述、追踪、推动业务。当一个指标波动时,我们首先需要从业务视角判断其波动是否异常,即异动检测,其次判断异常背后的原因是什么,即异动归因。 归因的方法有多种,这篇文章的重点是指标拆解,也是我们做业务分析时最常用到的方法。 我们的目的是解放人力,将指标拆解实现自动化,一方面可以加快业务迭代速度,快速定位问题;另一方面可以对可能产生异动的维度进行全局量化,增强可比性,明确下一步的业务行动点的优先级。自动化异变归因的目的是为了尽快判断并抓住机遇,寻求以数据驱动作为灯塔
9755 2