~~~~~~~~~~RT

解决方案 »

  1.   

    我有个问题  如果我把 接受到的数据 先拷贝到一个缓冲区  然后在用另外一个线程 开拆包  和处理
    并响应后来的io  ,但是我怎么知道哪些数据是哪个io的  需要保存 socket的 指针吗?还有如果我 recv 512k的 大小 对方只发送了40k的数据 就没发送了 这时候 get队列状态的函数会返回吗??
      

  2.   

    如果要保存指针的话  那不是要抱住存per handle data  这么的话 缓冲区没法弄~~
    但是 msdn上说为了 合理利用网络  recv 都是尽量接受 大的缓冲 
      

  3.   

    我想了一下
    意思就是说服务器端接受到的数据  都放在一个连续的buffer里面 供后面拆包用 
    然后相应的 socket放在一个链表里面
    可能 buffer里面多个数据包 都可能是1个用户发的  这样的话 就是一对多 的关系  那么 我怎么把它们联系起来
      

  4.   

    我这么定义perhandle handle  :
    stuct{socket s; pvoid p};  按固定大小接受了数据了数据就放在 p的buffer里面  然后在把每个socket per handle指针放在链表里面
    处理接受数据线程遍历链表 和buffer?
      

  5.   

    还有啊 关于拆包和组包 是直接在work线程里面好  还是接受了就放入一个buffer 开另外一个线程处理的好
      

  6.   

    我的意思是作为服务器 并不知道客户端  下次可能发什么请求  就是说 包的长度不定  。。这样的话我只好每次投递一个固定的recv请求 
    接受到数据后 吧实际数据拷贝到一个大于所有包的的buffer里面 ~~然后开另外一个处理..
    不知道还有什么好的方法的如果直接在完成端的工作线程组包并处理的话 就不需要这么麻烦 但是接受到的数据 不够一个要处理的数据单元 怎么办?我这里想不通。。我想把关键技术问题想通了在动手  第一次写网络程序 很多不多 请大家都指点~~
      

  7.   

    Recv当中的长度仅仅只是可以接收信息的最大缓冲区长度,而不是协议报文的长度,当协议报文大于该长度时,必须多次接收,但是协议报文小于该长度也可能需要多次接收。
      

  8.   

    我有个问题     如果我把   接受到的数据   先拷贝到一个缓冲区     然后在用另外一个线程   开拆包     和处理
    并响应后来的io     ,但是我怎么知道哪些数据是哪个io的     需要保存   socket的   指针吗? 
    ================================================================================================
    In the first place this is a incorrect question.
    per Buffer <--> per IOContext <--> per Socket, this is a one-to-one relation between them.
    and
    How to process data in buffer, it is another story.
    at least there are two ways to handle this job(one is circular buffer you mentioned) 还有如果我   recv   512k的   大小   对方只发送了40k的数据   就没发送了   这时候   get队列状态的函数会返回吗??
    =============================================================================================
    Remember tcp protocol is based on byte-stream.
    I suggest you read "TCPIP.Illustrated Volume 1"
    before you do IOCP programming.