紧急求助!关于socket优雅关闭问题?先看一段代码:C/C++ codeMyHandler(SOCKET hSocket){waitChar(hSocket,
紧急求助!关于socket优雅关闭问题?
先看一段代码:
C/C++ codeMyHandler(SOCKET hSocket){ waitChar(hSocket,'\0x11'); SendFile(hSocket,"C:\\a.dat") shutdown(hSocket,BOTH); closesocket(hSocket);}
下面是相关函数定义
C/C++ codevoid waitChar(SOCKET hSocket,char ch){ int ch1=0; while(SOCKET_ERROR!=recv(hSocket,&ch1,1,0)) { if(ch==ch1) break; }}bool SendFile(SOCKET hSocket,const char* filename){ CGFile file; file.Open(filename,CGFile::F_READ); ::TransmitFile(hSocket,file.GetHandle(),0,0,NULL,NULL,0); file.Close(); return true;}
以上代码是客户端处理程序的一个段,当客户端需要数据时,会发送'\0x11'给服务器,服务器收到请求后,发送一个文件给客户端,现在问题是这样的:
服务端在一个处理线程中调用MyHandler,但客户端收到的数据总是不全,但如果文件小一点,就可以全部接收到。后来调试发现服务端提前关闭了SOCKET,也就是说,SendFile完成之后立即关闭了SOCKET。
之前已经有使用相关代把SOCKET设置为“优雅关闭”,优雅关闭SOCKET,系统不是会自动把数据发送完毕吗?
[解决办法]为啥立马关闭呢?不能等客户端收完文件后,给服务端一个关闭信号吗?
[解决办法]oyljerry都两颗钻石了,咋不申请大版主了,也好让我提前退休
[解决办法]你怎么发送数据的呢?
成功send结束,并不意味着数据成功的发送到对方了
[解决办法][解决办法]退休贴啊
SendFile(hSocket,"C:\\a.dat")
shutdown(hSocket,BOTH); //为什么发送了就关闭?
你客户端单独开线程接收服务器发来的文件?
如果是就可以(但是等于服务器提前就知道你的地址,客户端变成服务器了)
不是的话,你关闭了,服务器你以发送的socket回复,回复给谁呢?