跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C Sharp IP 地址与端点
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= C# IP地址与端点 = == 介绍 == 在C#网络编程中,'''IP地址'''和'''端点(EndPoint)'''是两个基础但至关重要的概念。IP地址用于标识网络中的设备,而端点则结合了IP地址和端口号,为网络通信提供了完整的定位信息。理解这些概念是构建任何网络应用程序的第一步。 IP地址分为IPv4(如192.168.1.1)和IPv6(如2001:0db8:85a3::8a2e:0370:7334)两种格式。在C#中,'''System.Net'''命名空间提供了处理这些地址和端点的类。 == IP地址处理 == C#使用'''IPAddress'''类表示IP地址。以下是常见操作: === 创建IPAddress对象 === <syntaxhighlight lang="csharp"> using System.Net; // 从字符串创建IPv4地址 IPAddress ipv4Address = IPAddress.Parse("192.168.1.1"); // 从字符串创建IPv6地址 IPAddress ipv6Address = IPAddress.Parse("2001:0db8:85a3::8a2e:0370:7334"); // 特殊地址 IPAddress loopback = IPAddress.Loopback; // 本地环回地址(127.0.0.1) IPAddress any = IPAddress.Any; // 表示服务器应监听所有网络接口 IPAddress broadcast = IPAddress.Broadcast; // 广播地址(255.255.255.255) </syntaxhighlight> === 检查IP地址类型 === <syntaxhighlight lang="csharp"> IPAddress someAddress = IPAddress.Parse("192.168.1.1"); if (someAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { Console.WriteLine("这是一个IPv4地址"); } else if (someAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) { Console.WriteLine("这是一个IPv6地址"); } </syntaxhighlight> 输出: <pre> 这是一个IPv4地址 </pre> == 端点(EndPoint) == 端点结合了IP地址和端口号,在网络通信中标识特定的服务。C#提供了'''IPEndPoint'''类来表示这个概念。 === 创建IPEndPoint === <syntaxhighlight lang="csharp"> // 创建监听所有网络接口、端口8080的端点 IPEndPoint endPoint1 = new IPEndPoint(IPAddress.Any, 8080); // 创建特定IP和端口的端点 IPAddress ip = IPAddress.Parse("192.168.1.100"); IPEndPoint endPoint2 = new IPEndPoint(ip, 80); Console.WriteLine($"端点1: {endPoint1}"); Console.WriteLine($"端点2: {endPoint2}"); </syntaxhighlight> 输出: <pre> 端点1: 0.0.0.0:8080 端点2: 192.168.1.100:80 </pre> == 实际应用案例 == === 简单的TCP服务器 === 以下是一个使用IPEndPoint的简单TCP服务器示例: <syntaxhighlight lang="csharp"> using System; using System.Net; using System.Net.Sockets; using System.Text; class SimpleTcpServer { static void Main() { // 创建本地端点,端口号5000 IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 5000); // 创建TCP监听器 TcpListener listener = new TcpListener(localEndPoint); listener.Start(); Console.WriteLine("服务器已启动,等待连接..."); // 接受客户端连接 TcpClient client = listener.AcceptTcpClient(); Console.WriteLine($"客户端已连接: {client.Client.RemoteEndPoint}"); // 获取网络流 NetworkStream stream = client.GetStream(); // 读取客户端数据 byte[] buffer = new byte[1024]; int bytesRead = stream.Read(buffer, 0, buffer.Length); string data = Encoding.ASCII.GetString(buffer, 0, bytesRead); Console.WriteLine($"收到数据: {data}"); // 发送响应 string response = "消息已接收"; byte[] responseData = Encoding.ASCII.GetBytes(response); stream.Write(responseData, 0, responseData.Length); // 清理 client.Close(); listener.Stop(); } } </syntaxhighlight> === 对应的TCP客户端 === <syntaxhighlight lang="csharp"> using System; using System.Net; using System.Net.Sockets; using System.Text; class SimpleTcpClient { static void Main() { // 服务器端点 IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5000); // 创建TCP客户端并连接 TcpClient client = new TcpClient(); client.Connect(serverEndPoint); // 获取网络流 NetworkStream stream = client.GetStream(); // 发送消息 string message = "Hello, Server!"; byte[] data = Encoding.ASCII.GetBytes(message); stream.Write(data, 0, data.Length); Console.WriteLine($"已发送: {message}"); // 接收响应 byte[] buffer = new byte[1024]; int bytesRead = stream.Read(buffer, 0, buffer.Length); string response = Encoding.ASCII.GetString(buffer, 0, bytesRead); Console.WriteLine($"服务器响应: {response}"); // 清理 client.Close(); } } </syntaxhighlight> == 网络通信流程 == 以下mermaid图展示了基本的网络通信流程: <mermaid> sequenceDiagram participant Client participant Server Client->>Server: 连接到服务器端点(IP:Port) Server->>Client: 接受连接 Client->>Server: 发送数据 Server->>Client: 返回响应 Client->>Server: 关闭连接 </mermaid> == 高级主题 == === 域名解析 === 在实际应用中,我们通常使用域名而非直接IP地址。C#提供了'''Dns'''类来处理域名解析: <syntaxhighlight lang="csharp"> using System; using System.Net; class DnsExample { static void Main() { // 解析主机名 IPHostEntry hostEntry = Dns.GetHostEntry("www.example.com"); Console.WriteLine($"主机名: {hostEntry.HostName}"); Console.WriteLine("IP地址:"); foreach (IPAddress address in hostEntry.AddressList) { Console.WriteLine($" - {address}"); } } } </syntaxhighlight> === 端口号注意事项 === 端口号范围是0-65535,但: * 0-1023:知名端口,通常需要管理员权限 * 1024-49151:注册端口 * 49152-65535:动态/私有端口 == 常见问题 == === 如何处理多个网络接口? === 可以使用'''NetworkInterface'''类获取所有网络接口信息,然后为每个接口创建端点。 === IPv4与IPv6兼容性 === 现代应用程序应该同时支持IPv4和IPv6。可以通过'''DualMode'''套接字实现这一点。 == 总结 == * '''IPAddress'''类表示网络中的设备地址 * '''IPEndPoint'''类结合IP地址和端口号,标识特定服务 * 实际应用中通常使用域名而非直接IP地址 * 端口号选择应考虑权限和约定 * 现代应用应同时支持IPv4和IPv6 理解这些基础概念是进行更复杂网络编程的前提。在实际开发中,这些类和方法将频繁使用,建议通过实践加深理解。 [[Category:编程语言]] [[Category:C Sharp]] [[Category:C Sharp 网络编程]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)