📄 timeservice.java
字号:
import java.net.*;
import java.io.*;
import org.quickserver.net.server.ClientCommandHandler;
import org.quickserver.net.server.ClientHandler;
/*
* TimeService主要是实现QuickServer的ClientCommandHandler接口
* 然后在QuickServier的实例中将它绑定到一个端口就可以完成网络服务了
*/
public class TimeService implements ClientCommandHandler {
//SerMem是一个内部类,他是一个子线程,用来实现循环发送时间到客户端
//内部类的代码在TimeService类的下面
SerMem sm;
//这个方法是当与客户端建立Socket连接后自动调用的
//ClientHandler这个对象是来操作客户端socket的句柄,被QuickServer封装过
public void gotConnected(ClientHandler handler)
throws SocketTimeoutException, IOException {
//在控制台输出当前连接到服务器的客户端ip地址
System.out.println("[message]:A new socket has contented,IP:"+handler.getSocket().getInetAddress());
//建立一个新线程对象
sm = new SerMem(handler);
//启动该线程
sm.start();
}
//handleCommand是接口实现方法,当接收到客户端发送的数据时调用的方法
//commnad是由客户端发来的字符串数据
public void handleCommand(ClientHandler handler, String command)
throws SocketTimeoutException, IOException {
//这里默认接收到任何数据都会断开socket连接
handler.closeConnection();
//清理并结束线程
sm.clean();
}
//当连接意外丢失时调用的方法
public void lostConnection(ClientHandler handler) throws IOException {
sm.clean();//清理并结束线程
}
//当连接被关闭时调用的方法
public void closingConnection(ClientHandler handler) throws IOException {
sm.clean();//清理并结束线程
}
}
//实现一个子线程需要继承于Thread类或者实现Runable接口两种方法
class SerMem extends Thread {
//声明一个客户端socket操作对象
ClientHandler handler;
//建立一个用来格式化时间字符串的DateFormat对象
java.text.DateFormat df=java.text.DateFormat.getTimeInstance();
//构造方法,需要提供客户端socket操作对象
public SerMem(ClientHandler handler) {
this.handler = handler;
}
//结束线程时候调用此方法,释放socket操作对象的资源
public void clean()
{
handler=null;
}
//线程启动后执行run方法
public void run() {
//做一个无限循环的程序块
while (true) {
//当丢失客户端操作对象时中断循环结束线程
if(handler==null)
{
return;
}
try {
//使用socket操作对象的sendClientMsg方法向客户端发送时间数据
//这里在数据的前后要追加一个0字节的占位符,因为在flash中遇到0字节的数据时
//才判定数据接收成功,前面的\0来区别之前的数据
handler.sendClientMsg("\0" + df.format(new java.util.Date()) + "\0");
//让这个子线程挂起1秒中, sleep方法可以让此线程在1秒后继续执行
Thread.sleep(1000);
} catch (Exception e) {
clean();
e.printStackTrace();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -