作者ideaup (ideaupsoho)
看板C_Sharp
标题[问题] server 能处理同时连线人数的上限
时间Sat Nov 1 08:49:45 2008
UserObj[] Obj=new UserObj[100];
public void StartServer() {
socket s=new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
IPEndPoint ep=new IPEndPoint(IPAddress.Any, 8001);
s.Bind(ep); s.Listen(10);
while (true) {
socket UserSo;
try { UserSo=s.Accept(); }
catch { break; }
Byte[] bytes=new byte[256];
string msg="";
try {
int ct= UserSo.Receive(bytes);
msg= Encoding.Default.GetString(bytes);
}
catch (SocketException e) {}
//若每个接收到的socket,都用一个thread 来处理其接收.发送资料,
Obj[k].sa=UserSo;
Obj[k].OnTreatMsg+=new EventHandler<MsgEventArgs>(TreatMsg);
Obj[k].StartTh();
}
}
class UserObj {
public Socket sa;
public Thread work=null;
public event EventHandler<MsgEventArgs> OnTreatMsg;
public void StartTh() {
work = new Thread( new ThreadStart(receiveMessage));
work.Start();
}
public void receiveMessage() {
while (true) {
byte[] buf=new byte[512];
int ct=0;
string text=string.Empty;
if (sa==null) continue;
try { ct=sa.Receive(buf); }
catch { return; }
if (ct==0) return;
text+=Encoding.Default.GetString(buf, 0, ct);
MsgEventArgs arg=new MsgEventArgs(); arg.msg=text;
OnTreatMsg(this, arg);
}
}
}
若每个接收到的socket,都用一个thread 来处理其接收.发送资料,
大约同时连线人数多少时,server 处理会出现问题,100个,1000个?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.114.240.182