+ -
当前位置:首页 → 问答吧 → socket代码问题!

socket代码问题!

时间:2011-12-25

来源:互联网

client:
C/C++ code
void CclientDlg::OnBnClickedButtonSend()
{
    // TODO: 在此添加控件通知处理程序代码
    this->GetDlgItem(IDC_BUTTON_SEND)->EnableWindow(FALSE);
    FindClose(FindFirstFile(m_path,&FindFileData));
    CString data;
    client.Send(&FindFileData,sizeof(WIN32_FIND_DATA));
    UINT nsize = 0;
    UINT nsend = 0;
    int len = FindFileData.nFileSizeLow ;
    while (nsize < FindFileData.nFileSizeLow)
    {
        char * szbuf = new char[1024];
        nsend = m_file.Read(szbuf,1024);
        client.Send(szbuf,nsend,0);
        nsize+= nsend;
    }
    client.Close();
    m_file.Close();
    MessageBox(TEXT("发送成功!"));
    this->GetDlgItem(IDC_BUTTON_SEND)->EnableWindow(TRUE);
}


server:
C/C++ code
void CClientSocket::OnReceive(int nErrorCode)
{
    // TODO: 在此添加专用代码和/或调用基类
    CserverDlg * dlg=(CserverDlg*)AfxGetApp()->GetMainWnd();
    Receive(&(dlg->FileInfo),sizeof(WIN32_FIND_DATA)); //接受文件信息
    dlg->file.Open(dlg->FileInfo.cFileName,CFile::modeRead|CFile::modeWrite|CFile::typeBinary); //打开或创建文件
    AfxMessageBox(dlg->FileInfo.cFileName);
    UINT nsize =0;
    UINT ndata =0;
    while (nsize< dlg->FileInfo.nFileSizeLow) //循环接收文件内容
    {
        char * szbuf = new char[1024];
        ndata = Receive(szbuf,1024);  //接收文件内容
       dlg->file.Write(szbuf,ndata); //接收到得信息写入文件
       nsize += ndata;
    }
    SetFileTime((HANDLE)dlg->file.m_hFile,&dlg->FileInfo.ftCreationTime,//设置文件相关时间
        &dlg->FileInfo.ftLastAccessTime,&dlg->FileInfo.ftLastWriteTime);
    dlg->file.Close();
    SetFileAttributes(dlg->FileInfo.cFileName,dlg->FileInfo.dwFileAttributes); //设置文件属性
    CString data;
    data.Format(TEXT("已存入文件:%d字节数据!"),sizeof(nsize));
    AfxMessageBox(TEXT("接收完成,请点击接收完成已关闭套接字"));
    CAsyncSocket::OnReceive(nErrorCode);
}



CClientSocket 继承自CAsyncSocket类,client端第二次发送数据时(即发送文件中的内容时),server端收不到数据产生中断,怎样解决此问题 ndata = Receive(szbuf,1024); //接收文件内容(中断位置),谢谢各位!

作者: zhuweigangzwg   发布时间: 2011-12-25

求高手!

作者: zhuweigangzwg   发布时间: 2011-12-25