通信阶段伊始,这是第一次总结,现尝试将2节课所学所悟整理如下。
创建服务器只需简短一行代码:
ServerSocket server=new ServerSocket(9090);
服务器创建好后,服务器只需坐等客户机的连接:
java.net.Socket client=server.accept();
当有客户机与服务器连接上后,需要从Socket管道中得到输入输出流:
InputStream ins=client.getInputStream();
OutputStream ous=client.getOutputStream();
一切就绪后,考虑setUpServer()即可。
服务器不可能只服务于一个客户端,这时需要建立线程,每有一个客户机连接后就启动一个。
此外,用线程执行“阻塞”的代码,可以避免“阻塞”其他方法的调用。
以上是简单服务器的建立流程,现简述群聊服务器。
总的来说,简单服务器客户端的代码需要5个类:ChatServer、ServerThread、ChatTools、DaoTools和UserInfo。
ChatServer:
服务器运行的入口,等待连接并将进入的连接交给ServerThread处理。
ServerThread:
线程类,其run()方法负责处理Socket对象,一个线程可以看做一个客户端。
ChatTools:
存放已连接状态的ServerThread对象,负责这些对象之间的消息传递。
DaoTools:
验证登陆的合法性,其中保存着已注册的用户账号和信息。
UserInfo:
用户数据模板,每一个对象保存对应用户的账号信息。
需要注意的是,5个类虽不多,但其间的参数传递蛮复杂。这就要求我们编写程序时应注意代码的封装,封装越到位代码显得越清晰明了,模块化的优势增加了各个方法的可移植性和可修改性。
通过学习,还能总结出:
当不需要实例化一个类时,可以将它的构造函数写成私有。
当一个方法不需要通过实例化这个类来实现时,可以将它写成static的。
心得体会:
勤奋一点、常识懂得多一点、闹钟调得快一点、上课来得早一点。
创建服务器只需简短一行代码:
ServerSocket server=new ServerSocket(9090);
服务器创建好后,服务器只需坐等客户机的连接:
java.net.Socket client=server.accept();
当有客户机与服务器连接上后,需要从Socket管道中得到输入输出流:
InputStream ins=client.getInputStream();
OutputStream ous=client.getOutputStream();
一切就绪后,考虑setUpServer()即可。
服务器不可能只服务于一个客户端,这时需要建立线程,每有一个客户机连接后就启动一个。
此外,用线程执行“阻塞”的代码,可以避免“阻塞”其他方法的调用。
以上是简单服务器的建立流程,现简述群聊服务器。
总的来说,简单服务器客户端的代码需要5个类:ChatServer、ServerThread、ChatTools、DaoTools和UserInfo。
ChatServer:
服务器运行的入口,等待连接并将进入的连接交给ServerThread处理。
ServerThread:
线程类,其run()方法负责处理Socket对象,一个线程可以看做一个客户端。
ChatTools:
存放已连接状态的ServerThread对象,负责这些对象之间的消息传递。
DaoTools:
验证登陆的合法性,其中保存着已注册的用户账号和信息。
UserInfo:
用户数据模板,每一个对象保存对应用户的账号信息。
需要注意的是,5个类虽不多,但其间的参数传递蛮复杂。这就要求我们编写程序时应注意代码的封装,封装越到位代码显得越清晰明了,模块化的优势增加了各个方法的可移植性和可修改性。
通过学习,还能总结出:
当不需要实例化一个类时,可以将它的构造函数写成私有。
当一个方法不需要通过实例化这个类来实现时,可以将它写成static的。
心得体会:
勤奋一点、常识懂得多一点、闹钟调得快一点、上课来得早一点。