现在要做个东西,因为担心客户端发个太大的包给服务器所以想问一下能不能在receive之前判断数据包的大小,如果太大就不去接收了?

解决方案 »

  1.   

    结构里当然有包大小,但是如果对方故意发个大包给你,你服务器端直接receive那不就等于一直在接受不需要的数据么!如果对方故意要搞你,一直发大包,你服务器要卡死来
      

  2.   

    据我所知是没有办法在接收之前判断包大小的。
    协议要求以个包必须小于64k,还受操作系统限制,如DOS下最好小于64字节,windows下小于8k。
    可以根据IP:PORT限制接收者。
      

  3.   

    消息的尺寸有限制:理论上UDP数据报的最大尺寸略小于64KB,但实际上许多UNIX主机只提供32KB的最大尺寸,有的甚至只有8KB,最终套接口接收程序还会把这个最大尺寸限制为接收缓冲区的大小,许多程序UDP消息尺寸只有512B或更小. 以上摘自 <实战linux socket编程>
      

  4.   


    是不是说一个udp包不能大于64k?那我就不担心了,我开始以为udp包里面传的数据可以很大