Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xc13262215230
engine2.0
提交
b73fde09
E
engine2.0
项目概览
xc13262215230
/
engine2.0
通知
9
Star
3
Fork
8
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine2.0
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
b73fde09
编写于
12月 21, 2023
作者:
xc13262215230
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[getaddrinfo_2采用for循环获取ip列表]
上级
46516697
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
45 addition
and
18 deletion
+45
-18
engine2.0/engine2.0/Doc/Record.txt
engine2.0/engine2.0/Doc/Record.txt
+3
-1
engine2.0/engine2.0/EasyHttpClient/client.cpp
engine2.0/engine2.0/EasyHttpClient/client.cpp
+32
-14
engine2.0/engine2.0/EasyHttpClient/clientLog.txt
engine2.0/engine2.0/EasyHttpClient/clientLog.txt
+10
-3
engine2.0/engine2.0/engine2.0.sdf
engine2.0/engine2.0/engine2.0.sdf
+0
-0
engine2.0/engine2.0/engine2.0.v12.suo
engine2.0/engine2.0/engine2.0.v12.suo
+0
-0
未找到文件。
engine2.0/engine2.0/Doc/Record.txt
浏览文件 @
b73fde09
...
...
@@ -610,6 +610,8 @@ function onGET(evt) { // 数据请求
113.编码建议:
在服务端开发尽量避免std::string, 而采用char*进行代替。
114.
IPV4&IPV6
TCP&UDP
engine2.0/engine2.0/EasyHttpClient/client.cpp
浏览文件 @
b73fde09
...
...
@@ -10,7 +10,7 @@ class MyHttpClient : public TcpHttpClient
public:
MyHttpClient
()
// 构造函数
{
//pClient->
InitSocket(AF_INET, 10240, 10240);
InitSocket
(
AF_INET
,
10240
,
10240
);
}
virtual
~
MyHttpClient
()
// 虚析构函数
...
...
@@ -38,28 +38,43 @@ public:
{
if
(
nullptr
==
hostname
)
{
Log
::
Warring
(
"HostName2Ip, nullptr == hostname."
);
// 警告提醒,不一定是错误
return
-
1
;
// 0-
success 负数-
failed
return
-
1
;
// 0-
>success -1->
failed
}
addrinfo
hints
=
{};
hints
.
ai_family
=
AF_UNSPEC
;
// ipv6-AF_INET6, ipv4-AF_INET, AF_UNSPEC-任意
hints
.
ai_socktype
=
SOCK_STREAM
;
// socket stream
addrinfo
*
pAddrList
=
nullptr
;
// 存储获取的IP, 有可能有很多IP
int
ret
=
getaddrinfo
(
hostname
,
nullptr
,
nullptr
,
&
pAddrList
);
// 从域名中获取IP信息
int
ret
=
getaddrinfo
(
hostname
,
nullptr
,
&
hints
,
&
pAddrList
);
// 从域名中获取IP信息
if
(
0
!=
ret
)
{
Log
::
PError
(
"
getaddrinfo!"
);
// 获取系统发生的最后一个错误,可跨平台
Log
::
PError
(
"
%s getaddrinfo!"
,
hostname
);
// 获取系统发生的最后一个错误,可跨平台
// 分析:win系统采用unicode字符集输出存在乱码,应该采用多字节字符集
printf
(
"getaddrinfo error: %s, [ret=%d]
\n
"
,
gai_strerror
(
ret
),
ret
);
// 与方法getaddrinfo匹配的一个方法,功能同上
return
ret
;
// bug????
// 分析2:ret是当前函数的临时变量,如果采用Log::Info打印,其日志打印机制
// 是采用了一个独立打印线程实现的,就是将临时变量传入到了另外的线程,临时变量
// 在执行流出了当前作用域就会被系统回收,另外的线程在打印的时候,访问这个已经
// 被系统析构的临时变量,就发生了不可预知行为。
//printf("getaddrinfo error: %s, [ret=%d]\n", gai_strerror(ret), ret); // 与方法getaddrinfo匹配的一个方法,功能同上
freeaddrinfo
(
pAddrList
);
return
ret
;
// 返回错误码
}
char
ipStr
[
256
]
=
{
0
};
// 存储最终被我们见到的ip形式: ip字符串
ret
=
getnameinfo
(
pAddrList
->
ai_addr
,
pAddrList
->
ai_addrlen
,
ipStr
,
255
,
nullptr
,
0
,
NI_NUMERICHOST
);
if
(
0
!=
ret
)
{
Log
::
PError
(
"getnameinfo!"
);
}
else
{
printf
(
"ip: [%s]
\n
"
,
ipStr
);
}
for
(
auto
pAddr
=
pAddrList
;
pAddr
!=
nullptr
;
pAddr
=
pAddr
->
ai_next
)
{
// pAddr = pAddrList->ai_next // bug???
char
ipStr
[
256
]
=
{
0
};
// 存储最终被我们见到的ip形式: ip字符串
ret
=
getnameinfo
(
pAddr
->
ai_addr
,
pAddr
->
ai_addrlen
,
ipStr
,
255
,
nullptr
,
0
,
NI_NUMERICHOST
);
if
(
0
!=
ret
)
{
Log
::
PError
(
"%s getnameinfo!"
,
hostname
);
freeaddrinfo
(
pAddrList
);
return
ret
;
}
else
{
Log
::
Info
(
"%s ip: [%s]"
,
hostname
,
ipStr
);
}
}
freeaddrinfo
(
pAddrList
);
// 与getaddrinfo配套使用
return
ret
;
}
...
...
@@ -78,6 +93,9 @@ int main(int argc, char* args[])
MyHttpClient
httpClient
;
// 创建对象[在栈上实例化对象,对象由系统自动析构]
//httpClient.Get("www.dosfu.com/add.php?a=1&b=2"); // 请求数据[域名可以解析成ip+port]
httpClient
.
Get
(
"www.dosfu.com"
);
// 请求数据[域名可以解析成ip+port]
httpClient
.
Get
(
"ipv4.dosfu.com"
);
httpClient
.
Get
(
"ipv6.dosfu.com"
);
httpClient
.
Get
(
"dosfu.com"
);
httpClient
.
Close
();
// 关闭
...
...
engine2.0/engine2.0/EasyHttpClient/clientLog.txt
浏览文件 @
b73fde09
Info [2023-12-17 17:55:53]Log::setLogPath success,<clientLog.txt,w>
PError [2023-12-17 17:55:53]getaddrinfo!
PError [2023-12-17 17:55:53]errno:10093, errmsg: 应用程序没有调用 WSAStartup,或者 WSAStartup 失败。
Info [2023-12-21 22:27:35]Log::setLogPath success,<clientLog.txt,w>
PError [2023-12-21 22:27:36]www.dosfu.com getaddrinfo!
PError [2023-12-21 22:27:36]errno:11001, errmsg: 不知道这样的主机。
PError [2023-12-21 22:27:36]ipv4.dosfu.com getaddrinfo!
PError [2023-12-21 22:27:36]errno:11001, errmsg: 不知道这样的主机。
Info [2023-12-21 22:27:36]ipv6.dosfu.com ip: [fe80::6ce2:8493:4d:1a60%5]
PError [2023-12-21 22:27:36]dosfu.com getaddrinfo!
PError [2023-12-21 22:27:36]errno:11001, errmsg: 不知道这样的主机。
Info [2023-12-21 22:27:36]~Client[sId=-1 id=1 socket=448]
Info [2023-12-21 22:27:36]Client::Destory[sId=-1 id=1 socket=448]
...
...
engine2.0/engine2.0/engine2.0.sdf
浏览文件 @
b73fde09
无法预览此类型文件
engine2.0/engine2.0/engine2.0.v12.suo
浏览文件 @
b73fde09
无法预览此类型文件
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录