private void run() { IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, ChatSetting.port);//標識網路中某臺主機上的某一個程序。 Socket newSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //addressFamily 指定 Socket 使用的定址方案,socketType 指定 Socket 的型別,protocolType 指定 Socket 使用的協議。 newSocket.Bind(endPoint); //如果不事先Bind埠號的話,系統會預設在1024到5000隨機繫結一個埠號 newSocket.Listen(10); //擱置連線佇列長度上限。 while (true) { Socket socket = newSocket.Accept(); Console.WriteLine("接受一個新連線!"); ChatSocket client = new ChatSocket(socket); //建立新的Socket以處理傳入的連線請求。使用完 Socket 後,使用 Close 方法關閉 Socket。 try { clientList.Add(client); client.newlistener(processMsgComeIn); //newlistener是方法(按下F12可以快數追此方法)(110.03.15) //先解說newlistener此方法是用來開創一個執行續用來持續監聽對方送訊息過來的事件(委派)(110.03.15) //newlistener,此方法裡面的參數是吃delegate的屬性,要用委派工作必須同一個物件要一致(110.03.15) //public delegate String StrHandler(String str);這邊型態已說明是字串形式處理(110.03.15) //*** //簡單說明:此方法執行續一直執行監聽對象傳來的訊息,並以delegate(事件(委派)的方式處理)(110.03.15) //所以說此msg是掛在執行續得來的訊息,但執行續一個程式只能執行一個,但有了委派可以並行做某些事情(方法),而不互相打架一起占用到電腦的處理效能(110.03.15) //這邊可以去網路上查執行續的寫法,並有delegate的時候的差別(網路都有)(110.03.15) } catch { } } }
private void sendMsg() { if (user().Length == 0)//判斷目前使用者有沒有輸入名稱,若沒有則是沒有長度的,因此會跳出視窗要求請輸入使用者名稱(110.03.15) { MessageBox.Show("請輸入使用者名稱!"); return; } if (client == null) { client = ChatSocket.connect(ChatSetting.serverIP);//這邊是開始連上server的ip(110.03.15) client.newlistener(processMsgComeIn); //ChatServer.cs檔案ChattingRoom類別裡的40行有解說(110.03.15) client.send("< " + user() + " > 新使用者進入!"); textBoxUser.Enabled = false; } if (msg().Length > 0) { client.send(user() + " : " + msg()); textBoxMsg.Text = ""; } }