我是新手,在UDP编程中,遇到一些问题:
1.UDPServer的缓冲区大小为8192,我设置了一个记录类型,在客户端和服务器端固定传输这样的类型
客户端之间的聊天都通过服务器转发。
MsgInfo = record 
    msgtype:TMsgType; 
    nikename:array [0..9]  of char;
    from_ip: array [0..15] of char;
    to_ip:   array [0..15] of char; 
    info:    array [0..1023] of char;
    end;
   其中的info分量除了用于传输聊天内容,还用于服务器端传输给客户端在线用户的信息:格式为:
“用户名,IP地址;”,若有10人聊天,服务器端会利用info分量传输            11,XX.XX.XX.XX;22,XX.XX.XX.XX;33,XX.XX.XX.XX;……等10个人的在线信息给所有用户,让用户们解析后更新自己的在线列表。
问题来了:这样做的话,info分量的1024长度大约只能支持40多个用户同时在线聊天。若我想支持一两百人聊天该怎么办???把info分量设置成info: array [0..4096] of char;可以吗?这样的话,无论聊天还是传输在线信息,每次传输的包都有4000多字节,UDPserver和UDPclient的缓冲区大小默认为8192,聊天人数一多,会不会造成丢包现象或其他情况????
如果不用这个办法,还有什么办法可以解决问题???请大侠们帮帮我~!!!!2.UDPclient有一个ReceiveTimeOut属性,用于指明接收包的超时时间,这个值要设成多少才合理呀?它的具体意义是什么???????期待大侠们的回答

解决方案 »

  1.   

    >>info分量的1024长度大约只能支持40多个用户同时在线聊天。若我想支持一两百人聊天该怎么办??分多次传,有个标号,记录多次传是同一个包的
    >>让用户们解析后更新自己的在线列表。
    不应该同时发这个,应该和信息区分开来
      

  2.   

    1 同意阿日的2 超时时间ReceiveTimeOut一般默认即可,除非网络比较差,才可能设置稍微大些的值,表示Socket等待ReciveTime后如果还没有收到数据则发生异常