我正在用java写一个ftp服务器端的程序,但是现在我在如何处理超时上出现了一点小问题无法解决:
我首先有一个socket对象ctrlSocket用于接受客户端发来的命令:
String recvCommand = ctrlSocket.recvCommand();
我对这个socket设了超时5s,然后我在异常处理这里加入了这样的代码:
try{
String recvCommand = ctrlSocket.recvCommand();
//对于recvCommand的一些处理
//.......
}catch (SocketTimeoutException e) {
// 超时处理
try {
ctrlSocket.sendResponse("421 Transfer Time out:closing control connection");
}
catch (Exception ex) {ex.printStackTrace();}
} catch (IOException ex){
ex.printStackTrace();
} finally {
try {
ctrlSocket.close();
System.out.println("One thread terminated");
} catch (IOException e) {}
}我用cmd下的dos自带ftp命令来测试我的服务器端,当我5s内不做任何操作后再次输入命令时,只会显示
“Connection closed by remote host.”
而没有显示
“421 Transfer Time out:closing control connection”
但是我利用dos的ftp命令访问其他的服务器却可以显示出包含 “421” 的错误信息,我初步分析原因是我关了socket后客户端还没有接收到我发送的421信息(如果我不关ctrlSocket的话dos就会显示出421信息)。另外我如果在“ctrlSocket.close();”这句前面加入“recvCommand = ctrlSocket.recvCommand();”的话(即等待下一条指令),那么也会显示421信息,但是这样的话ctrlSocket还是可能会等待无穷的时间,我不知到如何能即关闭了ctrlSocket又能让客户端正确显示出421信息,请高手指点
我首先有一个socket对象ctrlSocket用于接受客户端发来的命令:
String recvCommand = ctrlSocket.recvCommand();
我对这个socket设了超时5s,然后我在异常处理这里加入了这样的代码:
try{
String recvCommand = ctrlSocket.recvCommand();
//对于recvCommand的一些处理
//.......
}catch (SocketTimeoutException e) {
// 超时处理
try {
ctrlSocket.sendResponse("421 Transfer Time out:closing control connection");
}
catch (Exception ex) {ex.printStackTrace();}
} catch (IOException ex){
ex.printStackTrace();
} finally {
try {
ctrlSocket.close();
System.out.println("One thread terminated");
} catch (IOException e) {}
}我用cmd下的dos自带ftp命令来测试我的服务器端,当我5s内不做任何操作后再次输入命令时,只会显示
“Connection closed by remote host.”
而没有显示
“421 Transfer Time out:closing control connection”
但是我利用dos的ftp命令访问其他的服务器却可以显示出包含 “421” 的错误信息,我初步分析原因是我关了socket后客户端还没有接收到我发送的421信息(如果我不关ctrlSocket的话dos就会显示出421信息)。另外我如果在“ctrlSocket.close();”这句前面加入“recvCommand = ctrlSocket.recvCommand();”的话(即等待下一条指令),那么也会显示421信息,但是这样的话ctrlSocket还是可能会等待无穷的时间,我不知到如何能即关闭了ctrlSocket又能让客户端正确显示出421信息,请高手指点
解决方案 »
- 关于JAVA的编译问题 求解!!!
- JTextArea滚动条问题
- IE插件开发
- Log4j配置好后,为什么没生成.log文件呢?
- 老鸟进,问个字符集转码的问题
- 第一次用weblogic,struts、jsf在上面都用不了?
- 进过这个的http://community.csdn.net/Expert/topic/4457/4457136.xml?temp=.9987757大虾来jf
- Tomcat的work文件夹下的文件夹删除问题
- applet从服务器硬盘读数字(dat),怎样做到applet一次载入不动态随文件改变而改变?(换个问发)
- java的执行命令
- WebLogic8.1插入MySql数据库中文乱码问题!
- java1.5容器类继承问题
中有没有及时用flush()刷空一下?
......
public void sendResponse(String response) {
this.output.println(response);
this.output.flush();
}