设为首页 加入收藏

TOP

Socket网络编程中的1448问题(二)
2014-11-24 02:50:53 来源: 作者: 【 】 浏览:1
Tags:Socket 网络编程 1448 问题
tStream in = socket.getInputStream();
int dataLen = 0; //报文前六个字节所标识的完整报文长度
int readLen = 0; //已成功读取的字节数
int needDataLen = 0; //剩余需要读取的报文长度,即报文正文部分的长度
byte[] buffer = new byte[6]; //假设报文协议为:前6个字节表示报文长度(不足6位左补0),第7个字节开始为报文正文
while(readLen < 6){
readLen += in.read(buffer, readLen, 6-readLen);
}
dataLen = Integer.parseInt(new String(buffer));
System.out.println("dataLen=" + dataLen);

byte[] datas = new byte[dataLen];
System.arraycopy(buffer, 0, datas, 0, 6);
needDataLen = dataLen - 6;
while(needDataLen > 0){
readLen = in.read(datas, dataLen-needDataLen, needDataLen);
System.out.println("needDataLen=" + needDataLen + " readLen=" + readLen);
needDataLen = needDataLen - readLen;
}
System.out.println("Receive request " + new String(datas, "UTF-8"));

OutputStream out = socket.getOutputStream();
out.write("The server status is opening".getBytes("UTF-8"));
//The flush method of OutputStream does nothing
//out.flush();
} catch (IOException e) {
//当服务端正在进行发送数据的操作时,如果客户端断开了连接,那么服务器会抛出一个IOException的子类SocketException异常
//java.net.SocketException: Connection reset by peer
//这只是服务器与单个客户端通信时遇到了异常,这种异常应该被捕获,使得服务器能够继续与其它客户端通信
e.printStackTrace();
} finally {
if(null != socket){
try {
//与一个客户通信结束后要关闭Socket,此时socket的输出流和输入流也都会被关闭
//若先后调用shutdownInput()和shutdownOutput()方法,也仅关闭了输入流和输出流,并不等价于调用close()
//通信结束后,仍然要调用Socket.close()方法,因为只有该方法才会释放Socket所占用的资源,如占用的本地端口等
socket.close();
} catch (IOException e) {
//ignore the exception
}
}
}
}
}
}


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇运用Spring注解实现Netty服务器端.. 下一篇关于C++中的#define

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: