读书人

!关于socket优雅关闭有关问题

发布时间: 2012-09-20 09:36:50 作者: rapoo

紧急求助!关于socket优雅关闭问题?
先看一段代码:

C/C++ code
MyHandler(SOCKET hSocket){    waitChar(hSocket,'\0x11');    SendFile(hSocket,"C:\\a.dat")    shutdown(hSocket,BOTH);    closesocket(hSocket);}


下面是相关函数定义
C/C++ code
void 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结束,并不意味着数据成功的发送到对方了
[解决办法]
探讨
oyljerry都两颗钻石了,咋不申请大版主了,也好让我提前退休

[解决办法]
退休贴啊
SendFile(hSocket,"C:\\a.dat")
shutdown(hSocket,BOTH); //为什么发送了就关闭?

你客户端单独开线程接收服务器发来的文件?
如果是就可以(但是等于服务器提前就知道你的地址,客户端变成服务器了)
不是的话,你关闭了,服务器你以发送的socket回复,回复给谁呢?


读书人网 >VC/MFC

热点推荐