【网络编程】循环面向连接服务器设计ECHO&TIME

简介: 【网络编程】循环面向连接服务器设计ECHO&TIME

题目:

构建循环,面向连接ECHO&TIME服务器


( 设计一个基于TCP的应用层协议,服务器收到客户发来的字符串后,加上时间标记再回射给客户。)


要求:


定义一个应用层协议

服务器算法设计

源代码

1. 定义一个应用层协议

基于TCP的ECHO&TIME的连接应用,绑定端口6789并实行监听,一旦建立了连接,当前的日期和时间就会和客户发送的消息进行连接后,以ascii字符串的形式被送出连接, 该服务在发送完后立即关闭连接


2. 服务器算法设计

1.创建套接字并将其绑定到他所提供服务的端口上,自定义为6789


2.将给端口设置为被动模式,使其准备为服务器所用


3.从该套接字上接受下一个连接请求,构造获得该连接的套接字


4.读取来自客户的需求,构造响应,按照应用协议向客户发回响应,此处构造的响应应为,先获取客户端传递过来的消息,再调用本地的time获取时间,然后拼接后返回给客户


5..关闭连接,并返回步骤3以接受新的连接


3. 源代码

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class TCPServer
{
  public static void main(String argv[]) throws Exception
  {
    //设置服务器接收和发送的字符
    String clientSentence;
    String returnSentence;
    //开启服务端口6789
    ServerSocket welcomeSocket = new ServerSocket(6789);
    //时间格式化
    SimpleDateFormat sdf = (SimpleDateFormat)DateFormat.getDateTimeInstance();
    Calendar calendar= Calendar.getInstance();
    System.out.println("服务器已经开启...");
    while (true)
    {
      //监听获取套接字
      Socket connectionSocket = welcomeSocket.accept();
      BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
      DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
      //读入用户输入
      clientSentence = inFromClient.readLine();
      returnSentence=clientSentence;
      //获取时间后拼接
      returnSentence+=sdf.format(calendar.getTime());
      //写回
      outToClient.writeBytes(returnSentence);
      connectionSocket.close();
    }
  }
}

结果:


使用telnet连接后,返回结果正确



相关文章
|
6天前
|
监控 Linux 测试技术
LabVIEW网络服务器何使用,有哪些不同
LabVIEW网络服务器何使用,有哪些不同
14 1
|
6天前
|
运维 数据安全/隐私保护
Finalshell 私钥连接服务器
Finalshell 私钥连接服务器
28 0
|
6天前
|
网络协议
LabVIEW中如何在网络上使用远程VI服务器
LabVIEW中如何在网络上使用远程VI服务器
10 2
|
6天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
17 6
|
6天前
|
网络协议 Dubbo Java
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
11 0
|
6天前
|
存储 数据处理 数据库
|
6天前
|
存储 缓存 网络协议
【专栏】理解并优化DNS设置对于提高网络速度至关重要
【4月更文挑战第28天】本文探讨了DNS服务器是否能加快网络访问速度。DNS负责将域名转换为IP地址,其查询时间、缓存机制和地理位置都影响网络速度。优化DNS配置,如选择快速的公共DNS服务、使用附近的服务器、确保设备正确配置和利用DNS缓存,都能有效提升网络体验。理解并优化DNS设置对于提高网络速度至关重要。
|
6天前
|
运维 安全 网络架构
【专栏】NAT技术是连接私有网络与互联网的关键,缓解IPv4地址短缺,增强安全性和管理性
【4月更文挑战第28天】NAT技术是连接私有网络与互联网的关键,缓解IPv4地址短缺,增强安全性和管理性。本文阐述了五大NAT类型:全锥形NAT(安全低,利于P2P)、限制锥形NAT(增加安全性)、端口限制锥形NAT(更安全,可能影响协议)、对称NAT(高安全,可能导致兼容性问题)和动态NAT(公网IP有限时适用)。选择NAT类型需考虑安全性、通信模式、IP地址数量和设备兼容性,以确保网络高效、安全运行。
|
6天前
|
负载均衡 网络虚拟化
【专栏】生成树协议(STP),用于消除网络环路并确保单向通信路径,提高可靠性和避免循环是至关重要的
【4月更文挑战第28天】本文详细介绍了生成树协议(STP),用于消除网络环路并确保单向通信路径。STP基于IEEE 802.1D,涉及根桥选举、端口角色分配及构建无环路径。高级特性包括快速STP(RSTP)的快速收敛、多实例STP(MSTP)的负载均衡和容错,以及各种保护机制。文章还讨论了实际案例和故障排除,为网络工程师提供STP的全面理解与应用指南。
|
6天前
|
监控 负载均衡 网络协议

热门文章

最新文章