TCP/IP 传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP 传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。TCP/IP协议是Internet最基本的协议,其中应用层的主要协议有Telnet、FTP、SMTP等,是用来接收来自传输层的数据或者按不同应用要求与方式将数据传输至传输层;传输层的主要协议有UDP、TCP,是使用者使用平台和计算机信息网内部数据结合的通道,可以实现数据传输与数据共享;网络层的主要协议有ICMP、IP、IGMP,主要负责网络中数据包的传送等;而网络访问层,也叫网路接口层或数据链路层,主要协议有ARP、RARP,主要功能是提供链路管理错误检测、对不同通信媒介有关信息细节问题进行有效处理等。

TCP 系列函数
Name Description Comment Return value
TcpAbort 立即关闭 TCP 套接字并发送 RST,socket 不再有效 与 TcpClose 和 TcpShutdown 相比,常规的 FIN-ACK 握手不会关闭连接
OnTcpClose 回调将在远程 socket 上调用
WSA_INVALID_PARAMETER (87): 指定的 socket 无效
SOCKET_ERROR (-1): 函数执行失败。错误内容使用函数 IpGetLastError 查询
TcpAccept 在指定的 socket 上接受传入的连接请求,从而产生一个新的 socket 传入连接必须始终被 TcpAccept 接受, 这通常在回调函数 OnTcpListen 中执行 INVALID_SOCKET (~0):函数执行失败,调用 IpGetLastError 以获取更具体的错误代码
WSA_INVALID_PARAMETER (87):指定的 socket 无效
Any other value:创建的套接字有效
TcpClose 关闭 TCP socket 执行之后传递的套接字不再有效
与 TcpShutdown 不同的是,每个方向的连接都被关闭,堆栈中套接字的资源被释放
socket 成功关闭,远程站上会启动一次 OnTcpClose 事件
0: 函数执行成功
WSA_INVALID_PARAMETER (87): 指定的 socket 无效
SOCKET_ERROR (-1): 函数执行失败。错误内容使用函数 IpGetLastError 查询
TcpConnect 建立与指定地址的连接 具体的错误代码是 WSAWOULDBLOCK (10035),不是“真正的”错误,只是确认了非阻塞套接字行为。 真正的连接错误与错误 10035 不同 WSA_INVALID_PARAMETER (87): 指定的 socket 无效
SOCKET_ERROR (-1): 函数执行失败。错误内容使用函数 IpGetLastError 查询
TCPGetRemoteAddress 检索指定连接 socket 的远程 IPv4 地址 IPv4 地址应使用 dword 型的 Little Endian 顺序展示/td> 地址 a.b.c.d 表示为数字 0x0d0c0b0a
TCPGetRemoteAddressAsString 以 Internet 标准点分十进制格式检索指定连接 socket 的远程地址 - 0: 函数执行成功
1: 数组空间小
2: 其他错误
TcpGetRemoteEndpoint 检索指定连接 socket 的远程端点 - 0: 函数执行成功
Any other value: 函数执行错误
TcpListen 侦听传入的连接请求 套接字必须事先用 TcpOpen 打开并且至少绑定到一个端口
必须使用 TcpAccept 接受侦听套接字上的传入连接,否则所有其他连接都将被拒绝并出现错误 10061(连接被拒绝)
0: 函数执行成功
WSA_INVALID_PARAMETER (87): 指定的 socket 无效
SOCKET_ERROR (-1): 函数执行失败。错误内容使用函数 IpGetLastError 查询
TcpOpen 创建基于连接或面向消息的通信的 TCP socket 所有参数都可以为零, 如果端口参数不为零,则套接字隐式绑定到给定端口
如果给出了地址但端口为零,则不执行隐式绑定;在这种情况下,请在打开套接字后使用 IpBind
INVALID_SOCKET (~0):函数执行失败,调用 IpGetLastError 以获取更具体的错误代码
Any other value:创建的套接字有效
TcpReceive 接收数据到指定的缓冲区 如果接收操作没有立即完成,操作将异步执行,函数将返回 SOCKET_ERROR (-1)
如果特定的错误代码是 WSA_IO_PENDING (997),这确认异步接收并且没有接收错误
0: 函数执行成功
WSA_INVALID_PARAMETER (87): 指定的 socket 无效
SOCKET_ERROR (-1): 函数执行失败。错误内容使用函数 IpGetLastError 查询
TcpSend 在指定的 socket 上发送数据 如果发送操作没有立即完成,操作将异步执行,函数将返回 SOCKET_ERROR (-1)
如果特定的错误代码是 WSA_IO_PENDING (997),这表示异步发送
0: 函数执行成功
WSA_INVALID_PARAMETER (87): 指定的 socket 无效
SOCKET_ERROR (-1): 函数执行失败。错误内容使用函数 IpGetLastError 查询
TcpShutdown 禁用指定 socket 上的发送操作 用于关闭 TCP 连接。 从而仍然可以接收数据
当使用此函数时,socket (与 TcpClose 相反)仅针对发送方向关闭
0: 函数执行成功
WSA_INVALID_PARAMETER (87): 指定的 socket 无效
SOCKET_ERROR (-1): 函数执行失败。错误内容使用函数 IpGetLastError 查询
OnTcpClose TCP socket 收到关闭通知时调用 在 TCP 套接字接收到关闭通知时调用
要释放套接字的资源,必须调用 TcpClose
-
OnTcpConnect 异步连接操作完成时调用 这意味着与远程站的连接已经建立,但还不能确定远程站是否接受了与 TcpAccept 的连接
如果远程站的侦听套接字被阻塞,则结果参数中会输出错误 10061(连接被拒绝)
-
OnTcpListen 接收到指定套接字的连接请求时调用 在调用 TcpListen 并接收到指定套接字的连接请求时调用
必须使用 TcpAccept 接受连接,否则其他客户端的侦听套接字将保持阻塞状态
-
OnTcpReceive TCP socket 上的异步接收操作完成时调用 该堆栈包含一个数据队列,一旦数据位于该队列中,该队列就会被 TcpReceive 减少
为了将来为套接字接收来自数据队列的额外数据,必须在回调中再次调用 TcpReceive
-
OnTcpSend TCP socket 上的异步发送操作完成时调用 该信息在物理发送后首先显示在 CANoe 跟踪窗口中
如果 CAPL 程序实现了这个回调,它会在堆栈中的数据已经被处理但还没有被放到总线上时被调用
-
Logo

一站式 AI 云服务平台

更多推荐