Skip to content

Commit ce37691

Browse files
committed
add 工作记录
1 parent db9f781 commit ce37691

File tree

16 files changed

+1429
-0
lines changed

16 files changed

+1429
-0
lines changed
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# Bug修改记录 10.28
2+
3+
## 1.18946:LTcpSocket的服务端和客户端之间传输中文数据,出现数据丢失
4+
5+
- 原因:`LString``length()`接口返回中文多字节字符的长度是时候出现了问题(不是网络模块的问题)
6+
7+
<img src="https://img-blog.csdnimg.cn/4c8b3c9766fb447abb7c54c2d3f6273a.png" alt="image-20231028095754992" style="zoom:80%;" />
8+
9+
- 解决:在`LTcpSocket`类中修改`sends()`函数的代码,改用`std::string().size()``Udp`部分也同步修改
10+
11+
<img src="https://img-blog.csdnimg.cn/07ca008b68064946b92ff8cdd1428119.png" alt="image-20231028095937250" style="zoom:67%;" />
12+
13+
<img src="https://img-blog.csdnimg.cn/3b67d47886254ca29efb672da40d1bfc.png" alt="image-20231028100135626" style="zoom:67%;" />
14+
15+
- 测试:在`LTcpDemo``test2()`函数中
16+
17+
![image-20231028100303771](https://img-blog.csdnimg.cn/b0d92b1c7a0b474084fd502680957959.png)
18+
19+
![image-20231028100313875](https://img-blog.csdnimg.cn/cd4cd2075ed94fd69fc128b1521f0030.png)
20+
21+
## 2.18836:LAbstractSocket的setbufferSize和bufferSize的注释 与实际功能不太相符
22+
23+
- 原因:"接收"敲错了
24+
25+
- 解决:头文件和源文件的对应部分已修改
26+
27+
<img src="https://img-blog.csdnimg.cn/2424668159e34729bc6c2ea5bd20f710.png" alt="image-20231028100610343" style="zoom:67%;" />
28+
29+
<img src="https://img-blog.csdnimg.cn/08b74e1c9cd04a159f5d7e90719ad24a.png" alt="image-20231028100621069" style="zoom:67%;" />
30+
31+
## 3.18947:LTcpSocket的客户端buffer=0 调用receives接收服务端的消息后 程序抛出异常并崩溃
32+
33+
- 疑问:程序走到这个地方,我提前做了判断并且抛出异常的操作,如果符合我的判断,程序理应抛出异常并且结束啊,个人认为这一条`bug`不是很合理,当然我自己做了捕获异常的话那当然是没问题的
34+
35+
- 测试:在`LTcpDemo``test2()`中我设置了设置缓冲区大小为0,做了异常处理,异常被正常捕获,程序后续也正常进行
36+
37+
![image-20231028104505420](https://img-blog.csdnimg.cn/e8aced335d76474c81352830246285ad.png)
38+
39+
![image-20231028104510539](https://img-blog.csdnimg.cn/b0b4a8daaa7044e8a3b0f44bbe764741.png)
40+
41+
## 4.18948:建议给LAbstractSocket的buffer初始化一个合适的大小
42+
43+
- 解决:设置为`C`标准`IO`库给出的缓冲区大小`BUFSIZ`(`8192`)
44+
45+
<img src="https://img-blog.csdnimg.cn/ef9e670db0354449aab6c6ee89730cd2.png" alt="image-20231028104804232" style="zoom:67%;" />
46+
47+
- 测试:在`LTcpDemo``test2()`中我不给`buffersize`设置任何值(假设我是用户,我忘了),看程序是否正常运行
48+
49+
![image-20231028100303771](https://img-blog.csdnimg.cn/b0d92b1c7a0b474084fd502680957959.png)
50+
51+
![image-20231028100313875](https://img-blog.csdnimg.cn/cd4cd2075ed94fd69fc128b1521f0030.png)
52+
53+
## 5.18832:LAbstractSocket的peerAddress在整个通信过程中获取对方地址时 返回错误
54+
55+
- 原因:学长的代码里面用了太多的指针,我不知道为什么在调用函数的过程中指针指向的值丢失了,也就是`peer->add`的部分丢失了,导致后续获取不到对方的地址
56+
57+
- 解决:因此我把整个项目用到指针的地方全部换掉了,并且对真的带有指针的类做了深拷贝的处理,防止了`double free`(`LUdpDemo`里面之前的报错,现在已经处理了)
58+
59+
- 测试:`LTcpDemo``test3()`中我分别在相对`sends()``receives()`的各个位置都获取了`peerAddress()`的信息
60+
61+
![image-20231028132431843](https://img-blog.csdnimg.cn/c3c89c546635424aa3a4156898c182ea.png)
62+
63+
![image-20231028132442537](https://img-blog.csdnimg.cn/ef3b4b3293cd460ea1d3cf3d19c96e74.png)
64+
65+
## 6.18923:LHostAddress的getAddress 建议调整其内部处理
66+
67+
- 解决:已做内部处理,地址类型为`Unknown`的时候返回了空指针
68+
69+
<img src="https://img-blog.csdnimg.cn/a04fd4a079494c4f8e01ac56dcf3fcf2.png" alt="image-20231028132306772" style="zoom:67%;" />
70+
71+
## 7.18862:LHttpReply和LHttpRequest的url()返回的数据不完整
72+
73+
- 原因:在返回url的时候未考虑协议和端口号的显示
74+
75+
- 解决:在`LHttpRequest``LHttpReply`类的`url()`接口中需要补充对协议和端口
76+
77+
<img src="https://img-blog.csdnimg.cn/568e97fd83e342b3b5c533228eb95338.png" alt="image-20231028172035316" style="zoom:67%;" />
78+
79+
<img src="https://img-blog.csdnimg.cn/d10dc942c6274d82bacfead8ed350ea5.png" alt="image-20231028172048947" style="zoom:67%;" />
80+
81+
当然`LHttpReply`当中虽然有`m_pData`,但是完全没有管端口,我增添了了一个接口`setPort()`,和`setUrl()`对应
82+
83+
<img src="https://img-blog.csdnimg.cn/1e863ef61b9f4fa087912fb3424b4ef7.png" alt="image-20231028172254826" style="zoom:67%;" />
84+
85+
`LHttpControl`的各种类型的请求收到回复的时候都调用了`setPort()`这个方法,下面是`get`的例子
86+
87+
<img src="https://img-blog.csdnimg.cn/5d7337cad3944dd791fa3ab1bb77895f.png" alt="image-20231028172419350" style="zoom:67%;" />
88+
89+
- 测试:在`HttpRequestDemo``test2()`中,先用公司的,他的那个测试代码是80端口,但是他的数据有丢失,这个`bug`我还没修
90+
91+
<img src="https://img-blog.csdnimg.cn/1a0e9de366a8451eb25c4c9b22d692a5.png" alt="image-20231028172530119" style="zoom: 67%;" />
92+
93+
为了测试端口不为80,我下面用了我自己的云服务器测试
94+
95+
`url`为:http://139.155.152.242:8080/test
96+
97+
<img src="https://img-blog.csdnimg.cn/72b0f8cb066f4278b337e2ef2e4c476e.png" alt="image-20231028172757806" style="zoom:67%;" />
98+
99+
请求结果如下:
100+
101+
协议和端口都显示出来了,这个的数据又全部请求到了,有点奇怪...
102+
103+
<img src="https://img-blog.csdnimg.cn/6abbaae33b6a4d679b7ade5d0307ff62.png" alt="image-20231028172859801" style="zoom:67%;" />
104+
105+
## 8.18738:LAbstractSocket的Lsocket函数名有误
106+
107+
- 解决:将函数名更改为`createSocket()`
108+
109+
<img src="https://img-blog.csdnimg.cn/11f7a40ab3284b9980b893b40a1bdaa0.png" alt="image-20231028173756696" style="zoom:67%;" />
110+
111+
## 9.18811:LUdpSocket的sends(unsigned char\* data,int length) 数据长度设置为0 在接收时程序崩溃
112+
113+
- 疑惑:在我这边的测试程序中跑出来正常,这条`bug`可能有问题
114+
115+
- 测试:在`LUdpDemo``test2()`中,按照`bug`的指示进行了重现
116+
117+
![image-20231028175300871](https://img-blog.csdnimg.cn/f56308a35f5c4e94ac1606c56c9f3944.png)
118+
119+
![image-20231028175307205](https://img-blog.csdnimg.cn/542de34d23e94d13854894f4c43fae79.png)
120+
121+
## 10.18808:LUdpSocket的sends(unsigned char\* data,int length) 发送前未设置对方的地址 程序崩溃
122+
123+
- 疑惑:和第3条一样,我认为抛出异常程序就应该结束,我们自身作捕获异常的操作就可以了
124+
- 测试:在`LUdpDemo``test1()`中,设置对方的IP和端口的代码就在下面
125+
126+
<img src="https://img-blog.csdnimg.cn/ce90495f0f6949709a35baa65d849405.png" alt="image-20231028175508217" style="zoom:67%;" />
127+
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# Bug修改记录 10.31
2+
3+
## 1.18919:LHttpControl的base64Encode 对用户信息编码后进行认证 认证失败
4+
5+
- 原因:第一,测试代码对用户名和密码的格式规范有问题,用户名和密码之间应该用 `':'` 连接;第二,`get`方法的请求有问题,处在对用户名和密码的编码操作当中
6+
7+
- 解决:我做了一些规范,我们设置请求报文的原始标头,传入身份验证的时候就直接传入用户名和密码,不需要手动调用`base64Encode`进行编码,这个东西我们在get请求内部进行,传入用户名和密码使用的是`setCredentials`方法
8+
9+
<img src="https://img-blog.csdnimg.cn/aa1b5702b92a4e9b85d0dfe4b0b7cc0f.png" alt="image-20231031193700228" style="zoom: 80%;" />
10+
11+
`get`请求当中对这一块的处理如下:
12+
13+
![image-20231031193739801](https://img-blog.csdnimg.cn/cc1be685d7de47d8b40ea17a9f86bde1.png)
14+
15+
- 测试:在`HttpControl`中的`testGet3()`,结果如下:
16+
17+
<img src="https://img-blog.csdnimg.cn/557e689f7f114aa4a8ee774664ae3e35.png" alt="image-20231031193859647" style="zoom:67%;" />
18+
19+
## 2.18917:建议完善LHttpRequest的base64Encode函数的注释
20+
21+
- 原因:是之前没有对用户名和密码到底怎么传入的说的不是很清楚,结合1查看;这个东西我更倾向于是一个私有函数,因为他是被我们的`get`调用的,然后用户使用`setCredentials`方法进行设置用户名和密码,在`get`请求当中会自动调用这个方法进行编码并且加入`Http`请求头
22+
23+
- 解决:已完善
24+
25+
![image-20231031194201605](https://img-blog.csdnimg.cn/c0b6b98377214089b119f25a3bfedc5d.png)
26+
27+
## 3.18908:LHttpRequest的setRawHeader设置短链接 设置失败
28+
29+
- 原因:在`get`请求封装`HttpReply`对象的时候,`HttpReply`类带有指针,但是没有做拷贝构造的重写,没有做深拷贝的操作
30+
31+
<img src="https://img-blog.csdnimg.cn/5f77ff24c52f4113826465c501c6baf9.png" alt="image-20231031200525383" style="zoom:80%;" />
32+
33+
对于`setRequest`函数,传的是一个值,这样就会创建一个新对象并且调用拷贝构造,这样在浅拷贝下就会导致两个对象公用一个数据段,因此当这个对象消亡后,`rawHeaders`中的数据自然就会被释放,这样原来的`rawHeaders`就没了...
34+
35+
![image-20231031200602821](https://img-blog.csdnimg.cn/0c492499b6d247aeb3120e563394a5a8.png)
36+
37+
数据段指针和里面的数据,里面存储了`rawHeaders`
38+
39+
<img src="https://img-blog.csdnimg.cn/41059363497d42099d745308232f057a.png" alt="image-20231031200756443" style="zoom:67%;" />
40+
41+
<img src="https://img-blog.csdnimg.cn/52e7f0bfa59f484682cb92de26de3228.png" alt="image-20231031200805595" style="zoom:67%;" />
42+
43+
- 解决:对`HttpRequest`类重写拷贝构造函数和拷贝赋值函数
44+
45+
<img src="https://img-blog.csdnimg.cn/34e136d1fa974154911b7de00a8bb9a5.png" alt="image-20231031200911352" style="zoom:67%;" />
46+
47+
- 测试:`HttpRequest`中的`test3()`,禅道上对应了两种情况,我的代码标注了,两个返回的值都是`close`
48+
49+
<img src="https://img-blog.csdnimg.cn/ed9d1322eb604d798458fa5476905787.png" alt="image-20231031201029896" style="zoom:67%;" />
50+
51+
## 4.18895:LHttpRequest的setAttribute多次设置失败
52+
53+
- 原因:`Attribute``code``value`是用键值对`Map`存储的
54+
55+
<img src="https://img-blog.csdnimg.cn/61bde52a99704b35959b1541da401bec.png" alt="image-20231031204557255" style="zoom:67%;" />
56+
57+
而在`setAttribute`当中,原来没有考虑多次设置的情况,只是盲目的插入,因此可能`LMap`检测到对已经有的`key`进行插入就舍弃了这组数据,因此设置失败
58+
59+
- 解决:分情况讨论,当没有`key`的时候插入,有的时候就覆盖这个值
60+
61+
<img src="https://img-blog.csdnimg.cn/1aed0e37252a444586edb15f46021f02.png" alt="image-20231031204750736" style="zoom:67%;" />
62+
63+
- 测试:`HttpRequest`中的`test5()`,运行结果:
64+
65+
![image-20231031204826651](https://img-blog.csdnimg.cn/9607e67fee484a20b9364b1c852e4cbf.png)
66+
67+
## 5.18861:确认 LHttpControl不设置任何标头值直接发送请求后的请求报文数据的完整性
68+
69+
- 解决:根据禅道上`Qt`返回的结果对相应请求标头设置了默认值
70+
71+
<img src="https://img-blog.csdnimg.cn/0090231d9047491d8441dd7323d1a861.png" alt="image-20231031205821072" style="zoom:67%;" />
72+
73+
- 测试:在`HttpRequest``test2()`中,结果如下,根据禅道上设置了一些请求标头的默认值:
74+
75+
<img src="https://img-blog.csdnimg.cn/81257b51fb914bf8a7d03fde5b0f8399.png" alt="image-20231031210114649" style="zoom:67%;" />
76+
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
# Bug修改记录 11.1
2+
3+
## 1.18903:LHttpControl访问要重定向的服务器时,重定向失败
4+
5+
- 原因:正常的`get`请求是没问题的,只是`get`请求如果请求到的是重定向的服务器的时候,返回`3xx`的状态码,并且响应报文的字段当中会包含`Location`字段来指出新的路径
6+
7+
- 解决:在`get`请求当中封装响应报文`reply`的时候做一步判断,看是否遇到了重定向的问题;如果是就在内部处理了再调用一次;`get_byte`也同步更改(当然后续可能`get_byte`会被合并到`get`当中...)
8+
9+
<img src="https://img-blog.csdnimg.cn/149ca12216624d518ac8b0aeacd5a45d.png" alt="image-20231101094906248" style="zoom:67%;" />
10+
11+
- 测试:在`HttpRequestTest`中的`test4()`中,结果如下:
12+
13+
<img src="https://img-blog.csdnimg.cn/23f5a6885d1e41568524cd8a9b7e7646.png" alt="image-20231101095021740" style="zoom:67%;" />
14+
15+
## 2.18872: LHttpControl的post请求地址中包含中文数据 无任务响应结果
16+
17+
- 原因:`LString``length()`方法返回多字节字符的长度不正确,导致`send()`函数发送的长度不准确,从而不正确
18+
19+
- 解决:将`LHttpControl`中所有关于`LString``length()`全部转化为`toStdString().size()`,以保安全
20+
21+
![image-20231101150236380](https://img-blog.csdnimg.cn/58a699e2aaba4ca4a32a8c4a01e9312d.png)
22+
23+
- 测试:`HttpControlTest``testPost3()`,结果如下:
24+
25+
![image-20231101150539378](https://img-blog.csdnimg.cn/fe3e719364bb435caeb017036ac0f041.png)
26+
27+
返回了`500`,这也是预期之内
28+
29+
![image-20231101150610637](https://img-blog.csdnimg.cn/21c826fe65b94fb8b9bb480a7e523282.png)
30+
31+
## 3.18873:LHttpControl发送put请求后 data()返回的数据有问题
32+
33+
- 原因:`put`请求的请求报文在写入完毕数据之后还写入了两个空行,导致格式出现问题
34+
35+
- 解决:已在对应位置进行修改
36+
37+
<img src="https://img-blog.csdnimg.cn/f4bb44197dbd4f4e87aeddfd762ab5f1.png" alt="image-20231101151933730" style="zoom:67%;" />
38+
39+
- 测试:`HttpControlTest``testPut2()`中,结果如下:
40+
41+
![image-20231101152034201](https://img-blog.csdnimg.cn/a17d8ff97caa4883868c8f721c61efd2.png)
42+
43+
## 4.18874:LHttpControl发送post请求后readRecv返回的数据没有响应体数据
44+
45+
- 原因:处理`readBuffer`的时候没有将响应头结束标志之后的数据正确存入
46+
47+
- 解决:已经在`post`接受数据的时候进行了正确处理
48+
49+
![image-20231101153607251](https://img-blog.csdnimg.cn/dd4f3432e90f42fdbe28b5b83a624839.png)
50+
51+
- 测试:`HttpControlTest``testPost3()`,和上面那个中文数据区分开,这里用的`path``/post`,结果如下:
52+
53+
![image-20231101153720068](https://img-blog.csdnimg.cn/ac09632058554c9c8110eada72757a95.png)
54+
55+
## 5.18876:LHttpControl发送put/delete/get/head请求后 readSend返回的请求报文格式欠佳
56+
57+
- 原因:的确之前封装的确实不够好,请求报文如果不携带数据段,那么请求头最后应该有一个空行;如果携带数据,那么数据后面不应该存在空行
58+
59+
- 解决:已按照此标准进行修改
60+
61+
- 测试:分别对`get``post``head``put``delete`请求进行测试,以上测试全部在`HttpControlTest`
62+
63+
- `get``testGet3`()
64+
65+
<img src="https://img-blog.csdnimg.cn/bf7146a3fe6742c58cb6b54a4f80966e.png" alt="image-20231101154941461" style="zoom:67%;" />
66+
67+
两个空行是因为我在输出的时候有多输出了一个回车导致的,所以实际上是没问题的
68+
69+
<img src="https://img-blog.csdnimg.cn/360bb0f8bcb44fdf8d59b58bdf4d0b2b.png" alt="image-20231101154955975" style="zoom:67%;" />
70+
71+
- `post``testPost3()`
72+
73+
数据后面不存在多余空行了,就只存在我们人为进行的换行
74+
75+
<img src="https://img-blog.csdnimg.cn/85c10d302fa44ef3baeea9e0e6af2218.png" alt="image-20231101155241297" style="zoom:67%;" />
76+
77+
因此,后续不携带数据的输出应该类似于`get`,携带数据应该类似于`post`
78+
79+
- `head``testHead()`
80+
81+
`get`...
82+
83+
<img src="https://img-blog.csdnimg.cn/8b75ea543dfc4d33801ea9054fb6cb7c.png" alt="image-20231101155529839" style="zoom:80%;" />
84+
85+
- `put``testPut2()`
86+
87+
`post`...
88+
89+
<img src="https://img-blog.csdnimg.cn/84868669e66943abbea1acbefdc34359.png" alt="image-20231101155616080" style="zoom:67%;" />
90+
91+
- `delete``testDelete()`
92+
93+
`get`...
94+
95+
<img src="https://img-blog.csdnimg.cn/17cd2db2364b4b0ba2f2c18a0b801453.png" alt="image-20231101155705578" style="zoom:67%;" />
96+
97+
98+
## 6.18902:LHttpRequest的setHeader设置的一些标头值中包含中文时 无任何响应结果
99+
100+
- 解决:我测试的时候能收到返回结果,可能是处理之前的细节问题的时候规范了请求报文的格式,自然就正确了吧
101+
102+
- 测试:`HttpRequestTest``test6()`,结果如下:
103+
104+
标头设置为中文是不合法的,所以返回了`400 Bad Request`,响应体也说明得很清楚
105+
106+
<img src="https://img-blog.csdnimg.cn/0736592d26eb40fbab2fb497b49275c0.png" alt="image-20231101164956079" style="zoom:50%;" />
107+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Bug修改记录 11.10
2+
3+
## 1.19277:LHostAddress的getAddressType 建议调整其内部处理
4+
5+
- 解决:已解决,类型为`Unknown`的时候直接返回类型而不是抛出异常
6+
7+
<img src="https://img-blog.csdnimg.cn/7f5da2032ad448129e4382c9ec84115a.png" alt="image-20231110100203475" style="zoom:67%;" />
8+
9+
## 2.19287: LHttpRequest的setMaxRedirects=0时 仍然重定向成功
10+
11+
- 原因:之前在`get`当中没有进行已经请求数和最大请求数的判断,现在加上
12+
13+
<img src="https://img-blog.csdnimg.cn/4e89521b4b1f4bd0aa63e5a94a8dc51e.png" alt="image-20231110100309302" style="zoom:67%;" />
14+
15+
注意,`LHttpControl`之所以能访问`LHttpRequest`的私有成员是因为我在`LHttpRequest`中指定`LHttpControl`为其友元
16+
17+
<img src="https://img-blog.csdnimg.cn/6e1055c45d6a42928b6ba3161641ee16.png" alt="image-20231110100402963" style="zoom:67%;" />
18+
19+
- 测试:在`HttpRequestTest``test4()`中,由于我设置了最大重定向数为0,所以访问不到
20+
21+
![image-20231110100528319](https://img-blog.csdnimg.cn/a9204d7adc2b47eea1e6fcac27f0550e.png)
22+

0 commit comments

Comments
 (0)