看板 C_Sharp 關於我們 聯絡資訊
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