【unity游戏开发——网络】IP和端口相关的类——IPAddress和IPEndPoint

发布于:2025-07-01 ⋅ 阅读:(19) ⋅ 点赞:(0)

注意:考虑到热更新的内容比较多,我将热更新的内容分开,并全部整合放在【unity游戏开发——网络】专栏里,感兴趣的小伙伴可以前往逐一查看学习。

前言

我们知道想要进行网络通信,进行网络连接,首先我们需要找到对应设备,IP和端口号是定位网络中设备必不可少的关键元素。在C#中提供了对应的IP和端口相关的类来声明对应信息,对于网络通信是必不可少的内容。

一、核心类解析

1、IPAddress类(地址管理)

using System.Net;

// ▶ 三种创建IP地址的方式:
// 方式1:字节数组初始化(机械但精确)
byte[] ipBytes = { 192, 168, 1, 100 };  // 相当于[192号楼, 168单元, 1层, 100室]
IPAddress ip1 = new IPAddress(ipBytes);

// 方式2:长整型初始化(不推荐,需16进制转换)
IPAddress ip2 = new IPAddress(0xC0A80164); // 192.168.1.100的16进制

// 方式3:字符串解析(最常用 ★)
IPAddress ip3 = IPAddress.Parse("192.168.1.100");  // 直接写地址字符串

特殊地址说明

  • 127.0.0.1 = 本机ip地址
  • IPAddress.IPv6Any = 获取可用的IPv6地址

2、IPEndPoint类(地址+端口绑定)

// ▶ 创建通信端点(地址+房间号)
// 方式1:长整型IP+端口(不推荐)
IPEndPoint endpoint1 = new IPEndPoint(0xC0A80164, 8080); 

// 方式2:IPAddress对象+端口(推荐 ★)
IPAddress ip = IPAddress.Parse("192.168.1.100");
IPEndPoint endpoint2 = new IPEndPoint(ip, 8080);  // 192.168.1.100:8080

端口号本质

  • 范围 0-65535 的整数(类似房间号)
  • 常见默认端口:HTTP=80, HTTPS=443, FTP=21
  • 开发建议:自定义端口用 1024-49151(注册端口)

二、实际应用场景

1、游戏服务器连接示例

// 连接《王者荣耀》上海服务器
IPAddress serverIP = IPAddress.Parse("121.40.89.214");  // 服务器公网IP
IPEndPoint gameEndpoint = new IPEndPoint(serverIP, 9001); // 游戏端口

// 连接本机测试服务
IPAddress localIP = IPAddress.Parse("127.0.0.1");       // 本机地址
IPEndPoint testEndpoint = new IPEndPoint(localIP, 8080); // 测试端口

2、端口使用规范表

端口范围 用途 示例
0-1023 系统保留端口 HTTP=80, FTP=21
1024-49151 注册端口(推荐开发用) 自定义游戏端口
49152-65535 动态/私有端口 临时通信端口

三、避坑指南

1、IP格式陷阱

// 错误:直接用字符串赋值
string wrongIP = "192.168.1.100"; // ❌ 不能直接当IP用

// 正确:必须通过Parse转换
IPAddress correctIP = IPAddress.Parse("192.168.1.100"); // ✅

2、特殊地址场景

  • 本机测试:始终用 127.0.0.1(即使断网也能用)
  • 公网部署:需获取 公网IP(非192.168/10.等内网地址)

3、端口冲突处理

// 检查端口占用(需System.Net.Sockets)
using System.Net.Sockets;
bool IsPortFree(int port){
    TcpListener tcp = new TcpListener(IPAddress.Any, port);
    try{ tcp.Start(); return true; }
    catch{ return false; }
    finally{ tcp.Stop(); }
}

四、最佳实践

// 标准创建流程(推荐写法)
IPAddress targetIP = IPAddress.Parse("目标IP字符串");  // 如"118.102.111.11"
int port = 8080;                                    // 自定义端口号
IPEndPoint communicationPoint = new IPEndPoint(targetIP, port);

// 本机测试专用写法
IPEndPoint localTest = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9999);

开发记忆口诀

  1. IPAddress.Parse 转字符串 → 获得地址对象
  2. new IPEndPoint(地址, 端口) → 锁定通信目标
  3. 本机测试用 127.0.0.1 + 空闲端口

专栏推荐

地址
【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,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到