写着玩的一个文件发送接收的程序,运行结果是 发送小文件没有问题,发送电影的时候,传了50M就出错了。
网络编程不多,不是很懂,希望知道的人帮帮忙。
发送端得发送代码:
struct CFileData
{
int Msg;
int count;
BYTE buf[1000];
};CFileData Data;
int count = m_Count;   // 得到文件的大小
m_File.SeekToBegin();  // 成员变量,打开发送的文件
if (count > 0)
{
     do 
     {
if (count >= 1000)
{
SendData(&m_File,1000,false);  // 封装的发送数据函数
}else
{
SendData(&m_File,count,true);  // 表示发送最后一批数据
}
count -= 1000;
      } while (count > 0);
}// 一次发送1000字节,直到发送完成为止
接收端也类似的 是不是这样每次发送1000字节的思路有问题?有做过类似程序的兄弟帮忙看看

解决方案 »

  1.   

    出什么错?
    getlasterror()??一直读文件一直发,一个个没问题的呀
      

  2.   

    出错是接收程序出的错   就是说  EXE遇到问题需要关闭  和其他应用程序出错一样啊 getlasterror() 没用啊 程序都停了 哪还会进getlasterror()?  也不好调试啊 都是传了
    几十M出的错  怎么调试? 断点跟踪几万次?  发送方发送缓冲满   怎么解释?  我都是BYTE buf[1000] 接收也是接1000字节 每次有信息来
    就BYTE buf[1000]  然后往这1000里写内容 最后一次不满1000 是多少就写多少。 怎么会溢出?
      

  3.   


    补充下接收端代码:(主要代码)
    ((CMysock *)lParam)->ReceiveMsg(&m_FileData,SIZE_CFileData); // 接收数据
    switch (m_FileData.Msg)                      // 分析数据
    {
    case FILE_SEND_NAME:                         // 如果是发送文件信息。。
    m_FileName = m_FileData.buf;         // 不会是这个case错
    i = m_FileName.Find('.',0);
    j = m_FileName.GetLength();
    memcpy(m_FileExt.GetBuffer(0),m_FileName.GetBuffer(0) + i + 1,j - i);
    m_FileName.SetAt(i,0);
    MessageBox("请接收文件!","提示信息:");
    break;
    case FILE_SEND_OVER:                         // 如果发送结束
    m_File.Write(m_FileData.buf,m_FileData.count);
    m_File.Close();
    MessageBox("文件接收完毕!","提示信息:");
    send.Msg = FILE_SEND_OVER;
    ((CMysock *)lParam)->SendMsg(&send,SIZE_CFileData);
    break;
    default:                                     // 其余则为发送中
    m_File.Write(m_FileData.buf,m_FileData.count);// 写入文件 break;                                }补充下m_FileData.Msg 存的其实就是每次发生的序列,比方说第一个1000字节 m_FileData.Msg = 1
    第二个1000字节m_FileData.Msg = 2.....FILE_SEND_OVER  定义为 0  FILE_SEND_NAME 定义为 -1   所以不会有冲突,也就是说正常发送信息都
    会进default。
      

  4.   


    SendData的返回值和接收函数的返回值或许需要判断一下…