注意
:考慮到熱更新的內容比較多,我將熱更新的內容分開,并全部整合放在【unity游戲開發——網絡】專欄里,感興趣的小伙伴可以前往逐一查看學習。
文章目錄
- 1、Socket套接字的作用
- 2、Socket類型與創建
- 3、核心屬性速查表
- 4、關鍵方法指南
- 5、工作流程圖解
- 6、典型應用場景
- 專欄推薦
- 完結
1、Socket套接字的作用
Socket是網絡通信的端點(類似電話插口),為不同設備間的數據傳輸提供通道。在C#中,System.Net.Sockets.Socket
類是TCP/IP網絡通信的基礎工具。
想象場景:客戶端與服務端像兩個需要通話的人
- 📞 Socket就是連接雙方的電話線
- 📦 數據包是通過電話線傳遞的包裹
- 📭 IP地址是收件人地址(門牌號)
- 🚪 端口號是具體收件窗口(門牌號下的房間號)
關鍵要素:
要素 | 說明 | 類比 |
---|---|---|
本機IP+端口 | 你的位置標識 | 你的電話號碼 |
對方IP+端口 | 通信目標位置 | 對方電話號碼 |
通信協議 | 數據傳輸規則 | 通話語言(如英語/中文) |
管道比喻:Socket像連接客戶端和服務端的透明管道,數據如小球在管道中流動:
- 發送方從管道入口投入小球
- 接收方從管道出口取出小球
- TCP協議保證小球順序到達(可靠管道)
- UDP協議不保證順序(可能亂序到達)
2、Socket類型與創建
常用通信類型對比:
類型 | 協議 | 特點 | 適用場景 |
---|---|---|---|
流套接字(Stream) | TCP | 可靠連接 數據有序 自動重傳丟失數據 | 文件傳輸、網頁瀏覽 需要高可靠性的場景 |
數據報套接字(Dgram) | UDP | 無連接 傳輸快 不保證順序和到達 | 實時游戲、視頻直播 可容忍少量丟失的場景 |
構造黃金組合:
// TCP套接字(可靠連接)
Socket tcpSocket = new Socket(AddressFamily.InterNetwork, // 使用IPv4地址SocketType.Stream, // 流式傳輸ProtocolType.Tcp // TCP協議
);// UDP套接字(快速傳輸)
Socket udpSocket = new Socket(AddressFamily.InterNetwork, // IPv4地址SocketType.Dgram, // 數據報模式ProtocolType.Udp // UDP協議
);
3、核心屬性速查表
屬性 | 作用 | 示例 |
---|---|---|
Connected | 檢查連接狀態 | if(socket.Connected){ ... } |
Available | 可讀取的字節數 | int dataSize = socket.Available; |
LocalEndPoint | 獲取本機地址+端口 | IPEndPoint local = (IPEndPoint)socket.LocalEndPoint; |
RemoteEndPoint | 獲取對方地址+端口 | IPEndPoint remote = (IPEndPoint)socket.RemoteEndPoint; |
ProtocolType | 查看協議類型 | if(socket.ProtocolType == ProtocolType.Tcp){ ... } |
4、關鍵方法指南
服務端必備三步驟:
// 1. 綁定地址端口(設置接聽座機)
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 8080); // 監聽所有網卡的8080端口
socket.Bind(endPoint);// 2. 開始監聽(打開電話鈴聲)
socket.Listen(10); // 允許10個等待連接// 3. 接受客戶端連接(接聽電話)
Socket clientSocket = socket.Accept(); // 阻塞直到有客戶端連接
客戶端連接一步到位:
// 連接指定服務器(撥打對方電話)
socket.Connect(new IPEndPoint(IPAddress.Parse("192.168.1.100"), 8080));
通用終止操作:
// 優雅關閉(先說再見再掛電話)
socket.Shutdown(SocketShutdown.Both); // 停止收發
socket.Close(); // 釋放資源
5、工作流程圖解
6、典型應用場景
- MMO游戲服務器:使用TCP保證玩家位置同步的可靠性
- 實時競技游戲:UDP傳輸快速的位置更新包
- 文件傳輸工具:TCP確保文件完整無誤
- 視頻會議系統:UDP傳輸即使丟失少量幀也可接受
專欄推薦
地址 |
---|
【unity游戲開發入門到精通——C#篇】 |
【unity游戲開發入門到精通——unity通用篇】 |
【unity游戲開發入門到精通——unity3D篇】 |
【unity游戲開發入門到精通——unity2D篇】 |
【unity實戰】 |
【制作100個Unity游戲】 |
【推薦100個unity插件】 |
【實現100個unity特效】 |
【unity框架/工具集開發】 |
【unity游戲開發——模型篇】 |
【unity游戲開發——InputSystem】 |
【unity游戲開發——Animator動畫】 |
【unity游戲開發——UGUI】 |
【unity游戲開發——聯網篇】 |
【unity游戲開發——優化篇】 |
【unity游戲開發——shader篇】 |
【unity游戲開發——編輯器擴展】 |
【unity游戲開發——熱更新】 |
【unity游戲開發——網絡】 |
完結
好了,我是向宇
,博客地址:https://xiangyu.blog.csdn.net,如果學習過程中遇到任何問題,也歡迎你評論私信找我。
贈人玫瑰,手有余香!如果文章內容對你有所幫助,請不要吝嗇你的點贊評論和關注
,你的每一次支持
都是我不斷創作的最大動力。當然如果你發現了文章中存在錯誤
或者有更好的解決方法
,也歡迎評論私信告訴我哦!