【网络编程学习】+Mculover666+qemu和网络编程

发布于 2018-08-03 13:20:57
    本帖最后由 Mculover666 于 2018-8-3 13:38 编辑


第一周的学习任务已经结束,主要是利用qemu和env学习rt-thread网络应用编程,学习群里的氛围很好,获得了不少的帮助,很感谢大家~现将这周学习过程中遇到的问题和学习所得分享出来~1.开发环境搭建中遇到的问题
1.1.网络共享问题

    (*)问题描述:已有网络可以正常上网,共享会出错

1.png2.png
* 问题分析:这是因为VMware生成的VMnet1和VMnet8所在的两个网段,其中一个网段刚好和微软共享的网段(就刚生成的那块网卡)相冲突;

* 解决方案:VMware Workstation Pro 编辑->虚拟网络编辑器 更改网段为其它;

1.2.RT-Thread获取不到ip

    (*)问题描述:在qemu中启动rt-thread后,输入命令ifconfig查看ip,发现没有获取到ip

3.jpg
* 问题分析:这种问题一般发生在第一次启动时,tap网卡还没有分配到ip

* 解决方案:进入网络和internet设置->更改适配器选项中,先禁用tap网卡,然后重新启动,等待一小会,重新启动qemu即可;

2.示例学习中遇到的问题
2.1.menuconfig问题

    (*)问题描述:在menuconfig中未在samples 软件包中发现示例代码 tcpclient.c;

4.png
* 问题分析:由图中可以看出,samples软件包选项未选中,所以env不会下载该包到本地;

* 解决方案:空格键选中后save,然后exit,如果env开启了自动下载软件包,软件包就会下载到本地,如图:

5.png 6.png
2.2.tcp连接问题

    (*)问题描述:如图,在8000端口开启TCPserver后,tcpclient连接失败;

7.png
8.png
* 问题分析:这是因为网络防火墙拦截了包,所以访问不到;

* 解决方案: 关闭网络防火墙;

9.png
10.png
11.png
12.png
13.png
14.png
3.homework--chatroom
3.1.整体思路
111.jpg
如图,整个任务要求是有限个状态而且顺序跳转,所以采用状态机
的思想编写;
rt_uint8_t state = 0;    //状态变量
.......
switch(state)
{
case 0:
/* 跳转到下一个状态 */
state = 1;
/* 初始状态下应该做的事 */
break;
. .....
default:
/* 防止状态机因为外界干扰或者程序错误而导致严重后果 */
/* 跳转到初始状态 */
state = 0;
/* 错误状态下应该做的事 */
break;
}

3.2.一个"\r\n"引发的问题* 问题描述:在第5问中,需要输出当前哪些人在聊天室,人数信息在第4问中获取,这个可以用一个指针+strcpy解决,但是这其中包含有“\r\n”,所以在发送的时候遇到第一个“\r\n”就发送完成,所以出现错误;

* 解决方案:在strcpy完字符串后,对字符串进行一遍遍历,将其中的"\r"和"\n"都替换为空格,发送前拼接时在最后加上"in the room\r\n",这样就可以发送成功了;

for(i=0;i{
if(current_all_id == '\n'||current_all_id == '\r')
current_all_id=' ';
}

3.3.完成结果
        homerwork1.jpg








查看更多

关注者
0
被浏览
75.6k
0 个回答
暂无答案,快来添加答案吧

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友