今日给我们介绍的是以太网操控网络单片机W7100A的运用笔记之怎么完结TCP通讯。
TCP(传输操控协议)是用于操控网络间数据通讯的协议。作为组成互联网的首要协议之一,更多的具体内容现已写入IETF(互联网工程使命组)的RFC 793中。TCP是运转于IP层上的协议,它确保了数据的有用传输而且能够依照数据的发送次序顺次进行接纳。
由于W7100A单片机支撑传输层的TCP协议,所以用户不需求做任何整合就能够直接运用TCP/IP协议。
下面逐个给我们做论述。
1TCP SOCKET
用户能够在W7100A供给的一切8个SOCKET中运用TCP协议,可是有必要首要创立要运用的SOCKET。在创立SOCKET时,需求用到SOCKET号、协议、端口号以及标志位。这篇文档将会介绍什么是TCP协议,以及在运用TCP协议时怎么将Sn_MR(TCPIP核心中的SOCKET n形式寄存器)设置为Sn_MR_TCP(0×01)。SOCKET号表明用户能够挑选从0到7这8个SOCKET中的恣意一个运用。端口号表明TCP协议下用户指定运用的端口。假如上面需求的这些都现已设定好,那么socket()函数就能够自行分配创立一个SOCKET。
由于W7100A单片机的TCP协议支撑服务器形式和客户端形式,用户能够恣意挑选一个形式完结此运用。服务器形式和客户端形式的不同见下图:
<图1.1> TCP 服务器和TCP 客户端
如图1.1所示,TCP服务器形式和客户端形式的进程大致相同。仅有的差异在于翻开SOCKET之后,SOCKET状况是监听仍是衔接。当TCP协议在服务器形式下运转时,服务器处于监听状况等候来自客户端的衔接恳求。假如TCP协议运转于客户端形式下,客户端将会在衔接状况下恳求衔接服务器。一旦成功树立衔接,SOCKET的状况将会变成树立(SOCK_ESTABLISHED,0×17)。SOCKET在点对点树立衔接之后依然能够坚持衔接状况,然后进行数据交换直到SOCKET封闭。
服务器形式下的SOCKET循环周期是由翻开、监听、发送、接纳、断开和封闭组成。客户端形式的SOCKET循环周期则是由翻开、衔接、发送、接纳、断开和封闭组成。
1.1翻开(OPEN)
无论是在服务器形式或是客户端形式下,在创立SOCKET时榜首步都是翻开SOCKET。运用SOCKET()函数设置SOCKET号、协议、端口号以及标志位来创立一个SOCKETn(取第n-1个SOCKET值)。由于运用的是TCP协议,需求将协议设置为Sn_MR_TCP(0×01)。而端口号的设置则取决所以在服务器形式仍是客户端形式下。假如是在服务器形式下,服务器会依据当时用户所运用的端口来设置源端口号。可是假如是在客户端形式下,由于意图端口号正在被运用,最好随机挑选一个端口号,并每次添加一个数字,直到SOCKET被衔接停止。TCP协议的标志位表明‘无延时承认标志位’,一般来说,将该位设置为0。更多关于协议类型、标志位等信息,将会在‘TCPIPCore.h’文件下的‘Sn_MR value’中介绍。
在一切的设置完结之后,经过查看Sn_SR(n)寄存器来查看SOCKETn的状况是否变成SOCK_INIT(0×13)。用户能够经过getSn_SR(SOCKETn)函数来完结Sn_SR(N)寄存器的查看进程。假如SOCKET的状况为SOCK_INIT(0×13),表明SOCKET创立成功;假如没有成功,用户需求从头创立SOCKET。
例1.1 翻开SOCKET
1.2 监听(LISTEN)
监听进程只能在服务器形式下运用。在SOCKETn创立完结后,为了能与客户端衔接,需求将SOCKET的状况从SOCK_INIT(0×13)变成监听。用户能够直接将Sn_CR(n)寄存器设置为Sn_CR_LISTEN(0×02)或许能够直接运用’SOCKET.c’文件中的LISTEN()函数。在变成监听状况之后,SOCKET将会改变为SOCK_LISTEN(0×14)。然后,SOCKET等候客户端宣布衔接恳求。一旦与客户端树立衔接,SOCKET的状况将会从头变成SOCK_ESTABLISHED(0×17)。此刻,便能够与客户端之间进行数据传输。
例 1.2 设置监听状况
1.3 衔接(CONNECT)
衔接进程产生在客户端形式衔接到服务器时。在衔接SOCKET时需求用到SOCKET号、意图IP以及意图端口号这些参数。用户能够经过CONNECT()函数进行设置;一旦成功树立衔接,SOCKET的状况将会变成SOCK_ESTABLISHED(0×17)。
例 1.3 设置衔接状况
1.4 发送(SEND)
在运用TCP协议时,与对端的衔接在发送数据前就现已完结。用户能够经过SEND()函数查看设置的SOCKET号、即将发送数据的地址、数据的巨细等参数。即将发送的数据的地址一般由挑选的区域承认,输入数据,而且经过指针设定区域。
例1.4 发送数据
1.5 接纳(RECEIVE)
接纳进程和发送进程根本相同,仅有不同的是接纳(RECEIVE)进程需求查看的是Sn_RX_RSR(n)。接纳进程是指将来自接纳缓存器的数据移动到用户数据存储区。因而,用户有必要在接纳之前查看Sn_RX_RSR(n)的值是否大于0。假如大于0,表明数据现已保存在接纳缓存器中。用户有必要经过getSn_RX_RSR(n)函数在此进程之前承认数据是否被接纳。
例1.5 接纳数据
1.6 断开(DISCONNECT)
封闭SOCKET的办法一般有两种:榜首种办法是经过DISCONNECT(n)函数。DISCONNECT(n)函数不能用来直接封闭SOCKET。它先向对端发送断开衔接恳求(FIN数据包),然后等候回复信息(FIN/ACK数据包),之后才能将SOCKET的状况变成SOCK_CLOSED(0×00),最终封闭SOCKET。当收到断开衔接恳求时,W7100A发送一个FIN/ACK数据包表明答应对端封闭SOCKET。假如在发送断开衔接恳求之后没有收到对端的回复,将会产生TCP超时,SOCKET的状况将会变成SOCKET_CLOSED(0×00)。当用户需求断开衔接时,经过DISCONNECT()函数,挑选适宜的SOCKET号,然后发送断开衔接恳求。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/fenxiao/258678.html