我是新手,在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.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属性,用于指明接收包的超时时间,这个值要设成多少才合理呀?它的具体意义是什么???????期待大侠们的回答
>>让用户们解析后更新自己的在线列表。
不应该同时发这个,应该和信息区分开来