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