CIPSTAT

AT_TCPIP_CmdFunc_CIPSTART
//start up tcpip connection
1)if (gCipBearer != BEARER_WIFI)
承载是GPRS(1)还是WIFI(2),若非WIFI,获取SimStatus
2)if ((!cipMux_multiIp && (CIP_INITIALg_uCipContexts.nBearerParas[BEARER_GPRS_DEF].nState ||
CIP_STATUS
_uCipContexts.nBearerParas[BEARER_GPRS_DEF].nState)) || (cipMux_multiIp && (CIP_STATUS = = bearerParas->nState || CIP_GPRSACT == bearerParas->nState)))
//只有在(单IP模式 且 (状态等于0【初始化】或者5【已获取IP】))或者
(多IP模式 且 (状态等于5【已获取IP】或者7【已激活状态】))
状态下才可以进行连接的建立,连接建立成功后的状态为CONNECT OK,连接失败,则处于失败的状态下。
if ((!cipMux_multiIp && pParam->paramCount != 3) || (cipMux_multiIp && pParam->paramCount != 4))
//判断参数个数
uMuxIndex = at_ParamUintInRange(pParam->params[0], 0, 7, &paramok);
//复用的连接号(0-7)
const uint8_t *mode = at_ParamStrOrText(pParam->params[0 + cipMux_multiIp], &paramok); //类型(TCP/UDP)
const uint8_t *ipaddress = at_ParamStr(pParam->params[1 + cipMux_multiIp], &paramok);//IP地址
uPort = at_ParamUintInRange(pParam->params[2 + cipMux_multiIp], 0, 65535, &paramok);//端口号

if ((CIP_INITIAL = = bearerParas->nState || gOutsidePdpCid == 1) && !useOutsidePdp(pParam->nDLCI,1)) //如果已有连接存在且已初始化,则获取ID,设置APN,激活 ??

否则进行AT_TCPIP_Connect:
进行域名解析,成功返回RESOLV_COMPLETE:
CFW_TcpipSocketEX(tcpipParas->uDomain,tcpipParas->uType,tcpipParas->uProtocol,tcpip_rsp, nMuxIndex << 16 | nDLCI); //TcpipSocketEX
在这里插入图片描述
实际调用 lwip_socket(新建了TCP控制块,包含netconn、pcb和socket,并把这三者绑定在了一条线上)
if (g_keepalive == 1)//如果一个连接上7200s后没有任何数据发送,则设置了这个选项的本端向对端发送keepalive保活报文
TCP_KEEPDILE 设置连接上如果没有数据发送的话,多久后发送keepalive探测分组,单位是秒
TCP_KEEPINTVL 前后两次探测之间的时间间隔,单位是秒
TCP_KEEPCNT 关闭一个非活跃连接之前的最大重试次数

    if (bearerParas->nCid == 0x11)netif = getEtherNetIf(bearerParas->nCid);//  wifielsenetif = getGprsNetIf(nSim, bearerParas->nCid);  //GPRS

//硬件接口设置

    ip4_addr_t *ip_addr = (ip4_addr_t *)netif_ip4_addr(netif);CFW_TCPIP_SOCKET_ADDR stLocalAddr = {0,};stLocalAddr.sin_len = 0;stLocalAddr.sin_family = CFW_TCPIP_AF_INET;if (tcpipParas->uProtocol == CFW_TCPIP_IPPROTO_UDP)stLocalAddr.sin_port = htons(gClocalport[nMuxIndex].udp_port);elsestLocalAddr.sin_port = htons(gClocalport[nMuxIndex].tcp_port);stLocalAddr.sin_addr.s_addr = ip_addr->addr;

SOCKET保存到本地,进行CFW_TcpipSocketBind (lwip_bind)//绑定
lwip_bind会调用netconn_bind(将IP和port绑定到TCP控制块)
->lwip_netconn_do_bind->tcp_bind

iResult = CFW_TcpipInetAddr(tcpipParas->uaIPAddress);
调用inet_addr,将字符串转换为32位二进制网络字节序的IPV4地址

iResult = CFW_TcpipSocketConnect(tcpipParas->uSocket, &nDestAddr, SIZEOF(CFW_TCPIP_SOCKET_ADDR));调用lwip_connect(打印出主机地址和端口号)->netconn_connect(将服务器端的IP地址和端口号与本地的netconn结构绑定)->lwip_netconn_do_connect->tcp_connect(向主机端发起连接,设置状态为SYN_SENT)->tcp_output(找出需要发送的东西,并发送它)->tcp_output_segment(填充TCP头部确认号,设置通告串口,发送具体数据段)->ip_output_if->ip4_output_if->ip4_output_if_opt->ip4_output_if_opt_src->ip4_debug_print(打印出IP包)
在这里插入图片描述

发送请求包完成,lwip层进行协议运转,
lwip_tcp_event收到LWIP_EVENT_CONNECTED的时候表示连接完成,sys_post_event_to_APP(EV_CFW_TCPIP_SOCKET_CONNECT_RSP, conn->socket, 0, cfw_socket_map[conn->socket].userParam);
向应用层上报EV_CFW_TCPIP_SOCKET_CONNECT_RSP事件,AT_TCPIP_Connect中socket时会回调tcpip_rsp,当tcpip_rsp收到EV_CFW_TCPIP_SOCKET_CONNECT_RSP时,会调用tcpip_connect_done,表示三次握手完成,链接成功建立.

定时器的实现: LWIP 中实现了两个定时器处理函数: tcp_fasttmr ()和 tcp_slowtmr ()。 tcp_fasttmr 函数是每 250ms 调用一次; tcp_slowtmr 函数每 500ms 调用一次。超时重传功能是在 tcp_slowtmr 中实现的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/353129.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Cloud Computing:云计算的简介、必要性以及安全上云与企业数字化转型(从陈坤/辛芷蕾主演电视剧《输赢》看云计算的未来)的关系

Cloud Computing&#xff1a;云计算的简介、必要性以及安全上云与企业数字化转型(从陈坤/辛芷蕾主演电视剧《输赢》看云计算的未来)的关系 目录 云计算的简介、必要性以及安全上云与企业数字化转型(从陈坤/辛芷蕾主演电视剧《输赢》看云计算的未来)的关系 从陈坤/辛芷蕾主演电…

relation-graph关系图谱组件2.0版本遇到的问题

前提&#xff1a;之前已经写过一篇1.1版本的问题&#xff0c;这里就不过多讲了&#xff08;如果想要解决火狐低版本兼容&#xff0c;看那个就行&#xff09; 这次主要讲的是和1.X版本的区别和一些其它问题 区别 参数名不同&#xff1a;以前的links>lines (虽然现在links也…

高压放大器在微流控技术的应用研究

随着微流控技术的不断发展&#xff0c;其在生物医学、环境监测、化学分析等领域中的应用越来越广泛&#xff0c;也对相关器件的性能提出了更高的要求。其中&#xff0c;高压放大器作为一种电子元器件&#xff0c;在微流控技术中具有重要的作用。下面安泰电子将从高压放大器在微…

仙境传说RO:添加商店物品教程

仙境传说RO&#xff1a;添加商店物品教程 我是艾西&#xff0c;今天跟大家分享下仙境传说RO游戏中我们自己怎么创建商店卖东西装备等&#xff0c;首先看看下图以及自己创建商店时需要在文档里创建的脚本格式 //*------------------shop普通商店------------------ //带坐标的…

Java养成类小游戏

此周是做项目 做一个java的养成类的小游戏 我是用控制台写的小游戏 建了很多的UI地图&#xff0c;部分代码&#xff0c; 然后让我们来看实现的样子&#xff1a; 好啦&#xff0c;部分内容就到这啦 早点洗洗睡叭&#xff01;

Java游戏合集

游戏1&#xff1a;猜数字小游戏&#xff1a; import java.util.Scanner; class GuessNumber{public static void main(String args[]){int number (int)(Math.random()*100)1;System.out.println("请输入一个数据&#xff08;1-100&#xff09;用于猜数字。");whil…

JAVA学习之路-简单的城堡游戏(一)

简单的文字城堡游戏&#xff08;一&#xff09; 最近在学习后台的一些功能&#xff0c;发现自己的基础不是很牢固&#xff0c;所以想写点小程序&#xff0c;巩固一下以前学的知识&#xff0c;融合一下。 之前在慕课上学的课程中就有一个这样的小程序&#xff0c;写一个简单的…

Nginx的优化,安全与防盗链

目录 一、Nginx的页面优化 1&#xff09;Nginx的网页压缩 2&#xff09;配置Nginx的图片缓存 3&#xff09;Nginx的连接超时设置 4&#xff09;Nginx的并发设置 查看cpu的核心数&#xff0c;根据核心数来设置工作进程数 修改工作进程核心数 &#xff1a; 测试结果&…

java做RPG小游戏

题目 java课设&#xff0c;一个游戏中有多种角色(Character)&#xff0c;例如&#xff1a;国王&#xff08;King&#xff09;、皇后&#xff08;Queen&#xff09;、骑士&#xff08;Knight&#xff09;、老怪&#xff08;Troll&#xff09;。 角色之间可能要发生战斗(fight)&…

【Java游戏合集】手把手教你制作游戏

家人们&#xff0c;今天我们来看一下学Java必练的10款游戏项目&#xff01; 大家都知道学习编程必须要做的就是敲代码和做项目练手了&#xff0c;那项目有难有易&#xff0c;很多小伙伴不知道从哪里找项目来练习&#xff0c;今日我们来看一下初级项目中都有哪些能让我们来练手…

Java桌面游戏巡礼——国外Java游戏合集(第一回)

1、 Virus Effect 这是一个2D的Java横板射击游戏&#xff0c;作者在其中融入了很多FPS&#xff08;First Personal Shooting Game&#xff09;要素&#xff0c;角色能够进行换枪、调整射击角度、装弹拆弹等仿真操作&#xff0c;并于游戏内设置有教学关卡&#xff0c;即使是从未…

java保姆级教程—— 1.什么是游戏

引言&#xff1a; Java保姆级教程是笔者在暑假时&#xff0c;为学弟们准备的java游戏教程&#xff0c;今天整理了一下&#xff0c;共享给网友们&#xff0c;笔者也是学生&#xff0c;若有大神发现文中存在误区&#xff0c;还请私信笔者。注&#xff1a;java游戏保姆级教程&…

Java游戏开发——对对碰

游戏介绍&#xff1a; 对对碰游戏在n*n的游戏池中进行&#xff0c;每个格子中有一个图案。鼠标连续选中两个横排或竖排相邻的图案&#xff0c;它们的位置会互换&#xff0c;互换后如果横排或者竖排有3个以上相同的图像&#xff0c;则可以消去该图像&#xff0c;并得分。 游戏…

连连看游戏的设计与实现——基于JAVA语言的小游戏

说明&#xff1a;本篇博客主要讲述练练看游戏的设计与实现。前半部分为分析与类和属性的说明&#xff0c;后半部分为程序的实现与程序代码。第一次写小游戏&#xff0c;仍存在许多问题&#xff0c;也借鉴了CSDN前辈的代码想法&#xff0c;如有不妥&#xff0c;还望多批评指正。…

Java写的第一个小游戏(续)

优化代码(数据维护): 注:此为小游戏最终版本 代码做到最优最简 基于之前发表的文章详情可见 点击查看前文 回顾之前的代码我们可以看到很多的固定常量值或是属性我们都会大量的重复使用,这并不符合我们代码简洁易懂的特点 所以我们可以把重复出现的量或是属性或是方法使用面向…

java小游戏超级玛丽:06.第二关的设计

第二关预览图&#xff1a; 判断是否为第二关 if (sort 2) {} 砖块位置图&#xff1a; 砖块坐标&#xff1a; A(240,390) B(270,360) C(300,330) D(270,360) E(300,360) F(330,390) G(360,360) H(390,390) I(420,390) f1(240,300) 空1&#xff08;420&#xff0c;270&a…

java小游戏超级玛丽:07.第三关的设计

第三关预览图 砖块位置图&#xff1a; 砖块坐标&#xff1a; A(290,390) B(320,360) C(350,330) D(320,390) E(350,480) F(350,390) G(380,300) H(380,330) I(380,360) J(380,390) K(410,270) L(410,300) M(410,330) N(410,360) O(410,390) P(60,390) Q(90,360) R(90…

【Java十大热门游戏合集】Java经典游戏项目

家人们&#xff0c;今天我们来看一下学Java必练的10款游戏项目&#xff01; 大家都知道学习编程必须要做的就是敲代码和做项目练手了&#xff0c;那项目有难有易&#xff0c;很多小伙伴不知道从哪里找项目来练习&#xff0c;今日我们来看一下初级项目中都有哪些能让我们来练手…

Java游戏开发——开心农场

游戏介绍&#xff1a; “开心农场”是一款以种植为主的社交游戏。用户可以扮演一个农场的农场主&#xff0c;在自己的农场里开垦土地&#xff0c;种植各种水果蔬菜。本次开发了一个“开心农场”游戏&#xff0c;运行程序&#xff0c;效果如下图所示。鼠标先选定指定土地&#…

JAVA 实现《超级玛丽》游戏

前言 在你的童年记忆里&#xff0c;是否有一个蹦跳、顶蘑菇的小人&#xff1f; 如果你回忆起了它&#xff0c;你定然会觉得现在它幼稚、无聊&#xff0c;画面不漂亮&#xff0c;游戏不精彩……但请你记住&#xff1a;这才是真正的游戏&#xff0c;它给了你无限的欢乐&#xf…