在C语言中获取域名和端口,核心在于解析URL字符串并提取Host与Port字段,若涉及网络通信则需通过getaddrinfo或gethostbyname等标准库函数将域名解析为IP地址,同时结合socket编程规范处理默认端口(HTTP为80,HTTPS为443)。

这一上文小编总结基于2026年网络编程最佳实践,针对高并发场景与安全性要求,单纯字符串解析已无法满足复杂需求,必须结合DNS解析机制与协议栈特性进行综合处理。
基础实现:字符串解析与协议默认值处理
在轻量级应用或配置读取场景中,开发者常需从配置文件中提取目标地址,手动解析URL结构是最高效的手段,但需严格遵循RFC 3986标准。
关键逻辑拆解
- 协议头识别:首先检查字符串是否包含`://`,以此区分HTTP、HTTPS或其他自定义协议。
- 域名提取:定位`://`后的首个`/`或`:`,截取中间部分即为域名或IP地址。
- 端口推断:若存在`:`,则提取其后数字;若不存在,根据协议类型赋予默认值(HTTP:80, HTTPS:443)。
实战代码示例
以下代码片段展示了如何安全提取域名与端口,适用于嵌入式设备或低资源环境:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void parse_url(const char* url, char* domain, int* port) {
const char* proto_end = strstr(url, "://");
const char* host_start = proto_end ? proto_end + 3 : url;
const char* path_start = strchr(host_start, '/');
const char* port_start = strchr(host_start, ':');
int len = path_start ? (path_start - host_start) : strlen(host_start);
if (port_start && port_start < (path_start ? path_start : host_start + strlen(host_start))) {
len = port_start - host_start;
*port = atoi(port_start + 1);
} else {
*port = 443; // 默认HTTPS端口,实际需根据协议判断
}
strncpy(domain, host_start, len);
domain[len] = '
