第7课 网络编程

Posted liufarrell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第7课 网络编程相关的知识,希望对你有一定的参考价值。

7.1 tcp

Tcp是一种面向连接的、可靠的、基于IP的传输层协议,无论哪一方发送数据,都需要先建立连接,连接是通过三次握手来进行初始化的,

第一次握手,客户端发送连接请求,等待服务器确认。

第二次握手,服务器收到请求,向客户端发送确认,同时,向客户端发送数据传输请求信息。

第三次握手,客户端收到连接确认信息,并向服务器发送数据接收确认。

完成三次握手以后,开始数据的传输。

首先,通过socket函数创建socket套接字,然后通过bind函数绑定一个端口号,用listen函数监听这个端口号,是否客户端发送连接请求信息,一旦有连接请求,通过accept函数来接收相应的请求,并建立连接。最后就可以通过send或者recv函数发送或接收信息。当然在客户端同样要建立socket套接字,然后通过connect函数向服务器监听的端口发送连接请求,如果连接成功了以后,服务器端和客户端就可以进行数据传递了。

有两个.c文件,tcp_server.c和tcp_client.c。首先在linux系统里调试一下,将这两个文件放入同一个目录下,分别编译一下,命令:sudo gcc -o tcp_server tcp_server.c和sudo gcc -o tcp_client tcp_client.c

然后通过./tcp_server运行服务器端,再开一个terminal,转入到同一个目录下,通过./tcp_client 192.168.0.222 运行客户端。从服务器端就可以看到“ok:server has got connect from 192.168.0.222“表示连接成功。我们在服务器端输入“hello world”,客户端可以收到字符的个数,同时收到相应的数据为“helloworld”,此时空格键自动被忽略了。

服务器端:

 技术分享图片

客户端:

 技术分享图片

接下来,我们将客服端程序下载到开发板,此时需要像第一个程序“”Hello,uClinux“程序一样做同样的事,我直接删除了之前的hello程序,将客户端的程序写进同一个目录scu文件夹里,并修改相应的Makefile文件,如下

EXEC = tcp_client

OBJS = tcp_client.o

all: $(EXEC)

$(EXEC): $(OBJS)

       $(CC) $(LDFLAGS) -o [email protected] $(OBJS) $(LDLIBS)

romfs:

       $(ROMFSINST) /bin/$(EXEC)

clean:

       -rm -f $(EXEC) *.elf *.gdb *.o

完成以后回到目录uClinux-dist目录下执行sudo make,然后下载到开发板。下载完成后,在linux端运行服务器程序./server,

 技术分享图片

并且在开发板上运行客户端程序./tcp_client 192.168.0.222,可以看到连接成功。

 技术分享图片

技术分享图片

 

在服务器端发送“hello,world”,在开发板上就会收到相应的数据。

 技术分享图片

技术分享图片

7.2 udp

Udp和tcp有点不同,udp不需要经过三次握手,将数据发送过去不需要对方回应,就像发短信一样,短信发送过去就行了,不需要去了解对方收没收到。

有两个.c文件,udp_server.c和udp_client.c。首先在linux系统里调试一下,将这两个文件放入同一个目录下,分别编译一下,命令:sudo gcc -o udp_server udp_server.c和sudo gcc -o udp_client udp_client.c。

如下图所示:

 技术分享图片

技术分享图片

同样,需要在开发板里验证一下,这次将开发板作为服务器,将电脑linux端作为客户端,验证结果如下:

 技术分享图片

技术分享图片

7.3 在线升级

我们之前的文件系统和内核镜像文件都是通过网线来下载,没法进行在线升级,接下来通过tftp进行在线升级,

首先在uClinux-dist目录下,执行sudo make xconfig进行相应的配置,选择user setting->Network Applications 选择tftp并且保存退出,

 技术分享图片

然后执行sudo make,完了以后下载到开发板,命令如下图所示:

 技术分享图片

 

技术分享图片

 

下载内核和镜像命令不在像之前那样了,在主机上直接下载。但是,烧录在哪里命令还是没有变。以后烧录程序,就不用再拔电重启了。。。

7.4 总结

这一节课讲了网络编程,虽然不多,但是每一个学习嵌入式的同学都是必须要掌握的,可见其重要性,内容不多,但需要花时间去理解,虽然不难,但是也不简单,只有慢慢来,才能理解的透彻。

以上是关于第7课 网络编程的主要内容,如果未能解决你的问题,请参考以下文章

学习进度条 第四周

第0课 - 数据结构引言

快乐编程大本营java语言训练班第5课: java的数组编程

快乐编程大本营java语言训练班第5课: java的数组编程

《英雄编程体验课》第 13 课 | 双指针

《英雄编程体验课》第 12 课 | 递归