当前位置: 代码迷 >> 汇编语言 >> 关于WIN32汇编文件传输的有关问题
  详细解决方案

关于WIN32汇编文件传输的有关问题

热度:2817   发布时间:2013-02-26 00:00:00.0
关于WIN32汇编文件传输的问题 请教高手
invoke recv,_hSocket,addr @szFileLength,sizeof @szFileLength,0 //接受文件长度
.break .if eax == SOCKET_ERROR
.break .if ! eax
invoke recv,_hSocket,addr @szFileName,sizeof @szFileName,0//接受文件名
.break .if eax == SOCKET_ERROR
.break .if ! eax
invoke CreateFile,addr@szFileName,GENERIC_WRITE,FILE_SHARE_READ,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
.if eax == INVALID_HANDLE_VALUE//打开文件
ret
.endif
mov @hFile,eax
xor ebx,ebx
.repeat//循环每次接受500字节数据,ReadSize为500,存放在 @DataBuff
invoke recv,_hSocket,addr @DataBuff,ReadSize,0
.if eax == SOCKET_ERROR
.continue
.endif
add @WriteCount,eax//把返回的数据长度累加在 @WriteCount
mov ebx,@WriteCount//用BX 和文件长度比较是否接收完
invoke WriteFile,@hFile,addr @DataBuff,ReadSize,addr @WriteOnce,0//写入文件
.until ebx < @szFileLength

上面的代码问题是 文件尾部总会少点数据,在C++里面用类似的方法是正常的
请教个位


------解决方案--------------------------------------------------------
@WriteCount 之前清 0 了没?WriteFile() 不应该用 ReadSize 而应该是上面的 eax 吧。
如果 @WriteCount 清 0 了的话,一般应该是文件尾部会多出来点儿,而不是少了。
------解决方案--------------------------------------------------------
local 默认是 0 ?谁说的??这个必须清 0 。如果是定义在 .data 里的,不清 0 还勉强。
  相关解决方案