返回目录
connect_nb功能
仅用于tcp类型的socket,非阻塞型,与目标tcp服务器建立连接 。
原型
INT connect_nb(SOCKET socket, const CHAR *srv_ip, USHORT srv_port);
入口参数
- socket:要进行connect操作的socket句柄
- srv_ip:目标服务器地址
- srv_port:目标服务器端口
【1 onps栈使用说明——API接口手册】0:连接成功 1:连接中-1:连接失败,具体的错误信息通过onps_get_last_error()获得
示例
EN_ONPSERR enErr;SOCKET hSocket = socket(AF_INET, SOCK_STREAM, 0, &enErr);if(INVALID_SOCKET == hSocket){printf("%s\r\n", onps_error(enErr));return;}//* 循环等待tcp连接成功while(1){INT nRtnVal = connect_nb(hSocket, "47.92.239.107", 6410);if(!nRtnVal){//* 连接成功,在这里增加你的自定义代码……break; //* 退出循环,不再轮询检查tcp连接进程}else if(nRtnVal < 0){//* 连接失败,打印错误信息并退出循环不再轮询检查tcp连接进程printf("%s\r\n", onps_get_last_error(hSocket, NULL));break;}else;//* 连接中,tcp三次握手操作尚未完成,此时你可以干点别的事情,或者延时一小段时间后继续检查当前连接状态……os_sleep_secs(1);}……close(hSocket);
返回目录is_tcp_connected功能
检查tcp链路是否处于连接状态 。
原型
INT is_tcp_connected(SOCKET socket, EN_ONPSERR *penErr);
入口参数
- socket:socket句柄
- penErr:指向错误编码的指针,函数执行失败时该参数用于接收实际的错误码
0:未连接 1:已连接-1:函数执行失败,具体的错误信息通过参数penErr获得
示例
EN_ONPSERR enErr;……INT nRtnVal = is_tcp_connected(hSocket, &enErr);if(nRtnVal > 0)printf("已连接\r\n");else if(!nRtnVal)printf("未连接\r\n");elseprintf("检查失败,%s\r\n", onps_error(enErr));……
返回目录send功能
发送数据到目标地址 。注意tcp链路下为阻塞型,直至收到对端的tcp层ack报文或超时才会返回 。udp链路下为非阻塞型,且只有在调用connect()函数后才能使用这个函数 。
原型
INT send(SOCKET socket, UCHAR *pubData, INT nDataLen, INT nWaitAckTimeout);
入口参数
- socket:socket句柄
- pubData:指向要发送的数据的指针
- nDataLen:要发送的数据的长度,单位:字节
- nWaitAckTimeout:仅用于tcp链路,指定发送超时时间,单位:秒,如参数值不大于0,则协议栈采用系统缺省值,该值由TCP_ACK_TIMEOUT宏指定(参见sys_config.h);udp链路未使用,可指定任意值
发送成功,则返回值等于nDataLen;发送失败,返回值不等于nDataLen,具体的错误信息通过onps_get_last_error()获得 。
示例
/* tcp链路下send()函数使用示例 */EN_ONPSERR enErr;……UCHAR ubUserData[128];INT nSndBytes, nSndNum = 0; __lblSend:if(nSndNum > 2){//* 超出重传次数,不再重传,可以关闭当前tcp链路重连tcp服务器或者你自己的其它处理方式……return;}nSndBytes = send(hSocket, ubUserData, sizeof(ubUserData), 3);if(sizeof(ubUserData) == nSndBytes){//* 发送成功,在这里添加你自己的处理代码……}else{const CHAR *pszErr = onps_get_last_error(hSocket, &enErr);if(enErr == ERRTCPACKTIMEOUT) //* 等待tcp层的ack报文超时{//* 数据重传,用户层实现tcp层重传机制nSndNum++;goto __lblSend;}else //* 其它错误,意味着底层协议栈捕捉到了内存不够用、网卡故障等类似的严重问题{//* 没必要触发重传机制了,根据你自己的具体情形增加容错处理代码并打印错误信息……printf("发送失败,%s\r\n", pszErr);}}……
返回目录send_nb功能
发送数据到目标地址,非阻塞型,其它与send函数完全相同 。
经验总结扩展阅读
- 索尼wf1000xm4怎么连接_索尼wf1000xm4使用说明
- 3 onps栈移植说明——添加网卡
- 2 onps栈移植说明——编译器及os适配层移植
- 1 onps栈移植说明——onps栈的配置及裁剪
- 亲爱的客栈杨紫乔欣是哪期?
- <一>从指令角度了解函数堆栈调用过程
- 漫步者funbuds怎么配对_漫步者funbuds使用说明
- 3 Python全栈工程师之从网页搭建入门到Flask全栈项目实战 - 入门Flask微框架
- 全自动洗衣机怎么用 全自动洗衣机使用说明
- 都卷Java,你看看你得学多少技术栈才能工作!