题目:
构建循环,面向连接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连接后,返回结果正确