日期:2014-05-20  浏览次数:20648 次

socket关闭导致传输失败的问题
	private void service(){		
while(true){
Socket socket = null;
DataInputStream input = null;
try{
socket = sslServerSocket.accept();

input = SocketIO.getDataInput(socket);
throws new Exception("exception");
}catch(Exception e){
if(null != socket){
try {
DataOutputStream output = SocketIO.getDataOutput(socket);
        String result = e.getMessage();
output.write(result.getBytes("utf-8"));
} catch (Exception e1) {
e1.printStackTrace();
logger.error("socket send message error!");
} finally{
if(null != socket){
try {
socket.close();
} catch (IOException e1) {
e1.printStackTrace();
logger.error("socket close error!");
}
}
}
}
}
}
}

当我关闭socket的时候,返回信息并不是一定会送完成,导致我的客户端有时报错,有时会获得正常的返回结果,我不想使用Thread.sleep(),这回导致处理延迟,socket = sslServerSocket.accept()又直接绑定了端口,这时调用socket的setSoLinger又不会生效,如何保证输出流完成后再关闭socket呢?先谢过各位了
java socket

------解决方案--------------------
我觉得这东西应该是阻塞的吧。
你放到一个线程里面,如果不运行完应该不会去执行finally里面的内容吧。
看着有点晕,如何我理解错了的话,或者你设计一个阻塞模式?运行到关闭socket的时候执行wait();
然后发送完了之后执行notify();
------解决方案--------------------
那你为什么不判断流读完以后再关闭socket呢?