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

该博客介绍了一个基于TCP的ECHO&TIME应用层协议,服务器在端口6789监听,接收客户端消息后附加当前时间并回射。提供的Java源代码展示了如何创建服务器,接收连接,读取客户端数据,构造带有时间戳的响应并关闭连接。
摘要由CSDN通过智能技术生成

题目:

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

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

要求:

  1. 定义一个应用层协议
  2. 服务器算法设计
  3. 源代码

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();
		}
	}
}

结果:

image-20220328120322951

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

image-20220328120512633

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小梁说代码

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值