VxWorks 完全支持 BSD socket,可以使用 TCP 和 UDP 两种通信形式。TCP 和 UDP 是
两种不同的传输协议。UDP 是 User Datagram Protocol 的简称,中文名是用户数据包协议, 是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 TCP 是 Transmission Control Protocol 传输控制协议,是一种面向连接(连接导向)的、可 靠的、基于字节流的运输层(Transport layer)通信协议。 两者之间的区别主要在于对传输数据的可靠性保证。UDP 追求**短时间内的快速传输 数据包,可靠性低而速度快。TCP 追求高可靠性,而导致在某些环境中传输速度较慢。 下面介绍 TCP 传输协议在 VxWorks 下的编程步骤。
特价现货,一手货源 价格优势 德国制造 品质过硬 库存充足 全新现货 倍福全系列 优质服务提供技术支持
欢迎新老客户朋友询价选购下单, 曾双风 上淘宝找【枫红工控自动化 】
医 壶 酒 吧 吧 而 思 而 已 思 酒 换成数字



建立流程
在网络通信中,要建立 TCP 传输协议的服务端,首先要创建一个侦听用套接字。在 VxWorks 中,创建侦听用套接字需要调用 socket()函数。其作用是建立一个套接字并返回这 个新建立的套接字的描述符。在创建套接字时,需要设定通信协议类型,分别为:连接(数 据流)型,电报(UDP)型和**基础(raw)型。本文使用的是连接(SOCK_STREAM)型。 当套接字使用 socket()创建后,它只是属于某种网络地址的类型,而没有真正和网络地址绑 定。这时需要与本地地址相绑定。 绑定地址,是指将网络地址绑定到指定的套接字,使其他套接字可以连接它。绑定所用 的函数为 bind()。 在调用前, 首先要建立本地地址, 需要用到 sockaddr_in 结构体。 sockaddr_in 结构体由 sin_family、sin_port、sin_addr、sin_zero 四部分组成,分别是地址家族(一般为 AF_INET) 、存储端口号、存储 IP 地址、保留的空字节。 当绑定好本地地址之后,调用 listen()开始侦听,即允许对指定套接字的连接。同时还 需要规定同一时间能够被缓冲在队列中的没有被接受的连接数。需要注意的是,listen 只是 允许连接,实际上的连接是在调用 accept()函数时被建立的。在调用 accept()后,将从侦听套 接字接受一个**的连接, 按与侦听套接字同样的属性创建一个通信用套接字, 并返回为此 套接字的描述符。只有开始侦听成功后,accept()才会执行,在此之前它将阻塞调用它的任 务。倍福kl2545\ks2545-端子模块 BECKHOFF山西太原** 客户端开始时,同样也需要创建一个套接字,不同的是这个 socket 只用于通信,然后 连接服务器端(connect) 。服务器端用于侦听的套接字接受(accept)这个来自客户端的连 接, 然后建立新的通信用套接字并利用新建的通信套接字与客户端进行通信。 服务器端和客 户端从各自的通信套接字传送和接收数据(send/recv) ,通信结束后再关闭相关的通信套接 字(close) 。服务器端和客户端的建立步骤如图 2 所示。倍福kl2545-端子模块 BECKHOFF山西太原**
server
client
socket
bind
socket
listen
connect
accept
send
recv
send
recv
close
close
图 2 服务器端和客户端的建立
3.2
程序代码
STATUS netInit(); 函数说明: 参数: 返回: 调用: STATUS netRecv(); 被调用: shell 下手动调用 网络服务器初始化 无 正确调用连接则返回 OK,否则返回 ERROR
倍福kl2545\ks2545-端子模块 BECKHOFF山西太原**
STATUS netInit() {
int listenSkt; int commuSkt;
//侦听 socket //通讯 socket
倍福kl2545-端子模块 BECKHOFF山西太原**