问题描述
我写的SOCKET文件传输带MD5校验,客户端总是多写16位的MD5服务端代码:(在WRITE完以后,还需要WRITE16位的MD5值)while(len<=8096&&fis.available()>0){byte[]src=newbyte[8096];len=fis.read(src);dos.write(src,0,len);dos.flush();}dos.write(fth.getMd5Value());dos.flush();客户端代码:while(rFilelen>0){byte[]recvData=newbyte[8096];intlen=dis.read(recvData);//进行SHA1校验digest.update(recvData,0,len);fos.write(recvData,0,len);rFilelen=rFilelen-len;System.out.println(rFilelen);}byte[]md5Value=newbyte[16];dis.readFully(md5Value);
解决方案
解决方案二:
该回复于2013-12-10 22:14:01被版主删除
解决方案三:
只有神知道你出了什么问题?报什么错?出了什么状况?你简单描述一呀。
解决方案四:
这样写就对了if(recvFileLen<=8096){inttem=recvFileLen%8096;byte[]recvData=newbyte[tem];intlen=dis.read(recvData);//进行SHA1校验digest.update(recvData,0,tem);//写文件fos.write(recvData,0,tem);recvFileLen=recvFileLen-len;}else{byte[]recvData=newbyte[8096];intlen=dis.read(recvData);//进行SHA1校验digest.update(recvData,0,len);//写文件fos.write(recvData,0,len);recvFileLen=recvFileLen-len;}