AWorks编程——socket通信

Posted ZLG致远电子

tags:

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

socket在计算机通信领域被称为“套接字”,是网络通信的一种方式,在AWorks系统中如何使用socket API建立服务器与客户端,进行数据通信呢?本文将详细为你介绍。


AWorks编程——socket通信  概述

要编写通过计算机网络通信的程序,首先要确定这些程序相互通信使用的协议,通常使用TCP或UDP协议族。TCP是面向连接的传输协议,建立连接时需要经过三次握手,断开连接时需要经过四次握手,中间传输数据也要回复ACK包进行确认。而UDP是非连接的传输协议,没有建立连接和断开连接的过程,它只是简单的把数据丢到网络中,也不明确区分服务器和客户端。因此TCP比UDP协议更加可靠,且TCP和UDP编程大致相同,所以本文就以TCP协议为例,建立图1所示的基本客户/服务器网络模型,进行通信。

 

AWorks编程——socket通信

图1 基本服务器-客户端模型


AWorks编程——socket通信  基本套接字编程

图2给出了一对客户与服务器进程之间发生的典型事件的时间表。服务器首先启动,稍后客户端启动连接到服务器。所有的客户和服务器都从调用socket开始,它返回套接字描述符;客户随后调用connect,服务器则调用bind、listen和accept;建立连接之后调用send、recv函数进行数据传输。数据传输完成后,套接字使用标准的closesocket函数关闭。

 

AWorks编程——socket通信

图2 基本客户/服务器程序的套接字函数


  • socket()函数:指定期望的通信协议类型(使用IPv4的TCP、使用IPv6的UDP等)创建套接字;

  • connect()函数:客户端向服务器发出连接请求;

  • listen()函数:仅服务器调用,使套接字进入被动监听状态。所谓被动监听是指当没有客户端请求时,套接字处于“睡眠”状态,只有当接收到客户端请求时,套接字才会被唤醒来响应请求;

  • accept()函数:当套接字处于监听状态时,可以通过aceept函数来接收客户端的请求;

  • send/recv()函数:发送和接收函数;

  • closesocket()函数:关闭套接字,回收资源。


AWorks编程——socket通信  网络连接与配置

socket通信程序基于网络之上,常规的开发板一般都携带以太网外设,所以本文以以太网为例,配置开发板的网络连接。


首先需要用网线连接开发板的网口和电脑,来建立网络的物理连接。其次在AWorks sdk包中的aw_prj_params.h文件中打开以太网设备宏,如程序清单1。


程序清单1 打开以太网配置宏

AWorks编程——socket通信



AWorks编程——socket通信



AWorks编程——socket通信  TCP客户端实例


程序清单3 回声客户端程序

AWorks编程——socket通信

AWorks编程——socket通信

AWorks编程——socket通信


程序编写完成后,我们使用TCP上位机软件测试。打开TCP调试软件,如图3。创建服务器,如图4。最后启动服务器,如图5。

 

AWorks编程——socket通信

图3 TCP调试工具

 

AWorks编程——socket通信

图4 创建服务器


AWorks编程——socket通信

图5 启动服务器


以上步骤就绪后,在主程序中调用demo_tcp_client_entry()入口函数,编译、下载程序到开发板,待程序运行之后,可以在shell界面看到TCP客户端连接成功,如图6,此时在上位机软件上可以看到建立的TCP连接,在发送区域向客户端发送数据,在接收区将看到客户端回发的数据,如图7。shell界面打印客户端收到的数据,如图8。

 

AWorks编程——socket通信

图6 TCP客户端连接成功


AWorks编程——socket通信

图7 服务器数据显示

 

AWorks编程——socket通信

图8 客户端数据打印


AWorks编程——socket通信  TCP服务器实例


程序清单4 非阻塞服务器

AWorks编程——socket通信

AWorks编程——socket通信

AWorks编程——socket通信

AWorks编程——socket通信


程序编写完成后,将服务器例程入口函数demo_tcp_server_block_entry()放入主函数中编译、下载到开发板,程序运行后在shell界面可看到服务器已经启动,如图9。

 

AWorks编程——socket通信

图9 服务器启动


服务器启动后,同样使用TCP上位机软件建立客户端进行测试,指定服务器的IP和端口号,如图10。

 AWorks编程——socket通信

图10 创建客户端


客户端创建后,点击连接,如图11。

 

AWorks编程——socket通信

图11 连接到服务器


连接成功后,在发送区发送数据,接收区可以看到服务器回发的数据,如图12所示。此时在串口界面也可以看到服务器收到的数据,如图13。

 

AWorks编程——socket通信

图12 客户端收发数据

 

AWorks编程——socket通信

图13 服务器收到的数据


AWorks编程——socket通信  出错调试

如果程序运行后,没有成功建立连接,可按照以下步骤查看网络状态:


 

AWorks编程——socket通信


AWorks编程——socket通信

图15 测试网络是否正常


注解:本文使用的硬件平台为M1052_EV_Board开发板,购买可咨询ZLG的销售人员;软件平台为aworks_m105x_sdk_1.0.4-alpha软件包,下载链接:http://www.zlg.cn。


AWorks编程——socket通信


AWorks编程——socket通信 如有任何疑问,可以:


以上是关于AWorks编程——socket通信的主要内容,如果未能解决你的问题,请参考以下文章

《精通android网络开发》--使用Socket实现数据通信

Socket是什么

Socket编程通过Socket实现TCP编程

socket网络编程

Java socket编程API基础

Java Socket编程基础