+ -
当前位置:首页 → 问答吧 → 为什么send只能发送一次啊! 真心蛋疼!

为什么send只能发送一次啊! 真心蛋疼!

时间:2011-12-16

来源:互联网



我的send()函数第一次可以发送,我看了返回值是40000,第二次调用的时候send()函数就根本没有返回值!连0都没有返回




我调用WSAGetLastError() 等于0;



请问什么原因啊·· 我贴出发送和接收的代码!

发送端:

C/C++ code

while(true)
                {

                    
                    static LONG j=0;
                    int i=0;
                    byte SubSection[40000];
                    for(i=0;i<40000;j++,i++)            //逗号运算符是以第二个值为整个表达式的值
                    {
                        if(j==pDlg->m_FileCliHead.FileLength)
                        {
                            break;
                        }
                        SubSection[i]=pDlg->m_FileContent[j];

                    }
                
                    [color=#FF0000]static int Send_byte=send(WirteSock.fd_array[0],(const char*)&SubSection,sizeof(SubSection),0);[/color]
                    memset(SubSection,0,40000);
                    pDlg->PostMessage(WM_SendProgressMove);
                
                    if(j>=pDlg->m_FileCliHead.FileLength) //修改对话框的大小
                    {
                        pDlg->MoveWindow(pDlg->m_TalkDlgRect.left,pDlg->m_TalkDlgRect.top,pDlg->m_SpRect.left-pDlg->m_TalkDlgRect.left,pDlg->m_NewTalkDlgRect.Height(),TRUE);

                        pDlg->m_SendProgressCtrl[pDlg->m_SendCount-1]->ShowWindow(FALSE);
                        pDlg->m_SendFileNameStaTx[pDlg->m_SendCount-1]->ShowWindow(FALSE);
                        
                        pDlg->m_Sendtop=25;
                        pDlg->m_Sendbottom=55;
                        closesocket(pDlg->m_SockGather[pDlg->m_FileIndetifier]);
                        WSACleanup();
                        j=0;
                        return 0;
                    }
                    Sleep(500);
                }
            }




接收端代码:

C/C++ code

while(true)
    {
        WaitForSingleObject(Recv_Event,INFINITE);
        

        static int RecvByte=recv(pDlg->m_SendSocket,(char*)&RecvBuf,sizeof(RecvBuf),0);
        
        
        file.Write(RecvBuf,RecvByte);
        pDlg->PostMessage(WM_RecvProgressMove);
        memset(RecvBuf,0,40000);

        file.SeekToEnd();                        //将文件指针移动至末尾
        RecvByte=0;
        if(file.GetLength()>=pDlg->m_FileSerHead.FileLength)
        {
            break;
        }
        SetEvent(Next_Recv_Event);
        
    }


作者: qweewqpkn2009   发布时间: 2011-12-16

send函数出毛病了啊··


第一次能使用 第二次没有作用了!

作者: qweewqpkn2009   发布时间: 2011-12-16

第二次send走到了么?建议写日志确认。
如果走到了,没有返回值,是不是一直阻塞了?

作者: buyong   发布时间: 2011-12-16

引用 2 楼 buyong 的回复:

第二次send走到了么?建议写日志确认。
如果走到了,没有返回值,是不是一直阻塞了?


走到了的 我单步调试了 执行到了SEND函数的~~!

阻塞 应该接收端还是接收的到数据啊! 但是接收端也只收到了第一次!


发送和接收都只有1次!


请问写日志是怎么弄 ? 我是菜鸟!

作者: qweewqpkn2009   发布时间: 2011-12-16

static int Send_byte

---

这个。。。。static?

作者: sinservice   发布时间: 2011-12-17

如果函数没有返回,你是在哪里调用GetLastError的呢?

作者: sinservice   发布时间: 2011-12-17