一:实验目标
实现一个简单的客户服务器GUI小程序
二:实验要求
1 、服务器程序最多同时接受5个客户的访问。
2 、实现迭代回声服务器功能,循环接受客户消息,并以特定消息结束服务(当用户输入quit时,服务器结束本次的服务)
3、实现服务器端简单的智能回答
[附注:实现语言:java]
三:实验详细过程
一、如何实现最多接受五个客户的访问?
答:通过增加一个循环语句,控制访问过程。通过ServerSocket对象创建一个服务监听端,调用accept()函数监听是否有客户请求连接。
ServerSocket s_socket = new ServerSocket(PORT);
....
for (int i = 0; i < 5; i++) {
Socket socket = s_socket.accept();
...
socket.close();
}
s_socket.close();
二、如何实现同时访问?
答:可以通过在服务端创建线程实现多个客户端对服务端的访问。
三:服务端和客户端之间怎样进行交互?使用何种协议?
答:使用的协议有 TCP 和 UDP 协议。本次实验所用协议为TCP--通过调用 DataInputStream() 和 DataOutputStream() 实现服务端和客户端之间的信息交互。
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
三:如何设计简单的问答?如何体现智能?
答:通过客户端输入的信息,对信息进行 关键字 搜索,到服务端的数据中心进行匹配,通过使用正则表达式对字符串进行匹配操作。可以对同一类问题设置多个回答,调用 Random() 函数产生随机数,模拟随机回答。
四:运行界面如下图:
四:实验总结
1、设置监听端口时需要主要端口占用问题。通过在控制台输入 netstat -ano 命令查看本机端口使用情况.
2、运行程序时,程序卡在中途无法运行:原因:服务端代码与客户端代码在同一个主函数里,当运行到服务端代码时,程序阻塞,导致整个程序阻塞。解决方案:
一、使客户端和服务端代码分离。
二、在调用服务端代码时,可以创建一个新的线程,实现并行运行。