我的服务器会不停的轮播这些文件。根据网友Lightest(一闪而过)说的:
1.将文件按照块编号(例如1k字节为1块).
2.发送方从头开始发送数据,每次发送一个块,并标明块号.连续发送,直到发送到文件结束.
3.接收方将接收到的块写入文件对应的块中.并检查当前接收的数据块号,如果在这个块号之前有漏掉的,且已经超时若干秒(例如3秒)未接收到的块.如果有,就把这个块号回复给接收方.
4.发送方重发接收方回复的漏掉的块.
现在的问题就是,要做一个结构体,包头里包括了当前发送的块的顺序号,甚至包括文件大小,文件名称等等,这样在接收端可以控制包的丢失。这个结构体(或者说协议)要怎么写?socket怎么发送这个?
循环接收文件的时候要怎么处理。我是菜鸟级的,请赐教,有源代码就更好了,谢谢。 [email protected]

解决方案 »

  1.   

    哈,你需要发什么数据就定义什么样的结构体发送的方法应该看socket的书会更清楚吧
      

  2.   

    定义好结构后,就可以直接用socket的send,recv发送和接收了
      

  3.   

    LPBYTE  pBuf = new BYTE[iBufSize]
    iBufSize = myFile.Read(pBuf, iBufSize)
    m_Socket.SendTo(pBuf, iBufSize)是定义好结构,还是在第二句读文件之前,给pBuf的前面几个赋值,后面跟文件内容?
      

  4.   

    struct FILE_PACKET_T{
    DWORD dwPackID;//包的序号
    DWORD dwPackCount;//包的总数
    BYTE pData[1000];//数据
    DWORD dwFileSize;//文件名
    BYTE strFileName[MAX_FILE_NAME_LEN];//文件名
    }CSocket sock;
    ...
    FILE_PACKET_T pack1;
    sock.Send(&pack1, sizeof(FILE_PACKET_T));
      

  5.   

    谢谢 Long long ago I am boy