广工java作业教学内容
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广工j a v a作业
《Java语言》课程作业
(第二次)
题目第15题
学院计算机学院
专业网络工程
班别
学号
姓名
2015年5月16日
一、课程题目
15. 利用Socket类和ServerSocket类编写一个C/S程序,实现C/S通信。客户端向服务器端发送“Time”命令,服务器端接受到该字符串后将服务器端当前时间返回给客户端;客户端向服务器端发送“Exit”命令,服务器端向客户端返回“Bye”后退出。
客户端服务器端
二、题目分析与设计
1.本题目要求创建一个客户端与服务器,两者能进行通信连接,客户端能从服务器获取服务器当前时间,能向服务器申请关闭连接。本题目主要用到Date类、SimplDateFormat类、socket类、SocketServer类、还有线程类等。
2.本题目没有界面,没有用到界面组件。
3.服务器端主程序监听某一个端口,客户端发起连接请求,服务器端主程序接收请求,同时构造一个线程类,用于接管会话。当一个Socket会话产生后,这个会话就会交给线程进行处理,主程序继续进行监听。实现程序流程是:客户端和服务器建立连接,客户端发送消息,服务端根据消息进行处理并返回相关消息,若客户端申请关闭,则服务器关闭此连接,双方通讯结束。
4.使用的开发环境是Eclipse。关键代码主要是I/O输出输入流,还有线程、套接字的连接。
三、测试分析
预测结果:当客户端输入Time时,服务器输出字符Time到屏幕返回服务器当前时间到客户端,客户端接收从服务器发来的时间并且输出到屏幕。当客户端向服务器发送字符Exit时,服务器向客户端发送字符Bye然后客户端输出字符Bye到屏幕。
下面图1是服务器的结果,图2是客户端的结果,与预测结果一样。
图1
图2
附录:源代码
客户端代码:
import .*;
import java.io.*;
public class Client
{
public static void main(String[] args)throws IOException
{
// TODO Auto-generated method stub
try
{
Socket socket = new Socket("127.0.0.1",9); // 创建一个流套接字并将其连接到指定 IP地址的指定端口号
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));//创建BufferedReader对象读取从键盘输入的字符
//由Socket对象得到输出流,并构造相应的BufferedWriter 对象,设置输入字符格式为UTF-8类型
BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
// 由Socket对象得到输入流,并构造相应的BufferedReader对象,设置输入字符格式为UTF-8类型
BufferedReader bufIn = new BufferedReader(new
InputStreamReader(socket.getInputStream(),"UTF-8"));
String line = null;
while((line =buf.readLine()) != null)//读入一行字符串
{
bufOut.write(line);//输出读入的字符到服务器
bufOut.newLine();//输出读入的一行字符到服务器后换行
bufOut.flush();//刷新输出流,使服务器马上收到该字符
String str = bufIn.readLine();//读入从服务器得到的字符
if(!("Bye".equals(str)))//如果从服务器读入的字符不是"Bye"
{
System.out.print(str);//输出从服务器中读入的字符
System.out.println();
}
else
{
System.out.println("Bye!");//如果从服务器读入的字符是"Bye"则输出"Bye!"到客户端屏幕
break;//跳出循环
}
}
//关闭流
socket.close();
buf.close();
bufOut.close();
bufIn.close();
}
catch(Exception e)//抛出异常
{
e.printStackTrace();
}
}
}
服务器端代码:
import java.io.*;
import .*;
import java.text.SimpleDateFormat;
import java.util.*;
public class Server
{
public static void main(String[] args) throws Exception
{
// TODO Auto-generated method stub
try
{
@SuppressWarnings("resource")
ServerSocket server = new ServerSocket(9); // 创建一个ServerSocket在端口9监听客户请求
for(;;)
{
try
{
Socket socket = server.accept();// 侦听并接受到此Socket的连接,请求到来则产生一个Socket对象,并继续执行
System.out.println("服务器已经启动!");