專案代碼:在這
第一章 Echo程式
- Socket 包含本地和遠程的主機IP和埠號,以及網路協議,埠號0~65535
- Socket中Connect、Send、Receive均為阻塞方法
- 書中服務端代碼沒有快取Socket導致客戶端重新發送資訊,然后等待回復阻塞,
第二章 異步和多路復用
- 書中利用BeginConnect連接和BeginReceive異步接收資訊(Begin和End是成對出現的),里面的回呼函式是在另一個執行緒中,是訪問不到Unity主執行緒的東西的,會產生你更新不了Update的Text問題,如下圖

- 服務端中,利用BeginAccept異步接收請求時,后面需要加Console.ReadLine();否則啟動將直接關閉
- 本地測驗2個客戶端時可以通過(clientSocket.RemoteEndPoint as IPEndPoint).Port查看埠,判斷是哪個客戶端(不用列印ip地址因為都是在同一臺電腦上測驗),效果如下

- 后面就是聊天室、就是接收到資訊,服務器給每個客戶端發送訊息,客戶端保留上次的字串,效果如下

- Poll客戶端和服務端,主要利用Socket.Poll,
- 客戶端將會在Udpate一直判斷if(socket.Poll(0, SelectMode.SelectRead))是否可讀,如果可讀將會讀取并顯示,
- 服務端將會利用socket_Listen.Poll判斷是否有客戶端連接,然后遍歷快取的所有Sock是否可讀,如果可讀將會廣播給所有的客戶端,
- 這里有很強的弊端,客戶端和服務端在沒有任何訊息往來時候,將會一直遍歷回圈

- 由于上面的回圈會造成大量cpu壓力,從而引出了Select,Socket.Select可以檢查IList中所有的Socket,并將可讀、可寫、錯誤的Socket保留IList中,如果沒有可讀的將會阻塞,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289692.html
標籤:其他
上一篇:IT-游戲 學習資源思維導圖(持續更新,歡迎關注點贊加評論)
下一篇:【游戲開發實戰】Unity使用Socket通信實作簡單的多人聊天室(萬字詳解 | 網路 | TCP | 通信 | Mirror | Networking)
