大家好,我使用CC3000与笔记本进行tcp连接的数据通讯。
cc3000 –> 服务器
笔记本 –> 客户端
有时候会有收不到客户端发来的连接请求,一直在下面的while循环里,阻塞和非阻塞的接收方式都试过了,bind\listen函数返回值都正常
当客户端调用connect时
cc3000阻塞方式:阻塞直到连接超时,放回-1.如果继续accept,仍然阻塞着,然后返回-1; 需要客户端调用好几次connect才会接收到,甚至有时候会一直都接收不到。
cc3000非阻塞方式:情况与阻塞类似,但这个是立即返回-2.知道客户端显示连接超时,cc3000也都没能接收到连接。
这样的话,我客户端不得不进行多次调用connect才能连上服务器。这是为什么呢?
while(ulCC3000Connected){i = 0;while(ulCC3000Connected){val = SOCK_OFF;ret = 1;while(ret != 0){ret = setsockopt(fd,SOL_SOCKET,SOCKOPT_ACCEPT_NONBLOCK,&val,sizeof(socklen_t));}Delay(10);memset((char *)&remote_addr,0,sizeof(sockaddr));sockLen = sizeof(sockaddr);connect_fd = accept(fd,(sockaddr*)&remote_addr,&sockLen);if(connect_fd > 0){ulClient_Status = 1;break;}Delay(10);}timeout.tv_sec = 1;timeout.tv_usec = 0;//超时时间 (微妙)FD_ZERO(&readsds);FD_ZERO(&exceptsds);FD_ZERO(&writesds);FD_SET(connect_fd,&exceptsds);FD_SET(connect_fd,&writesds);while(ulClient_Status && ulCC3000Connected){i = 2;FD_ZERO(&readsds);FD_SET(connect_fd,&readsds);ret = select(connect_fd+1,&readsds,NULL,NULL,&timeout);if(ret == 0){Delay(100);continue;}if(ret <0){while(1){}}ret = tese_sock_send_and_recv(connect_fd);if(ret <= 0){Delay(50);continue;}}ret = closesocket(connect_fd);// ret = closesocket(fd);// Delay(500);}
gaoyang9992006:
不清楚啊,不过根据多次尝试就可以连接上,这跟手机有点相似啊,我的手机就是WIFI有时候连接不上,尝试很多次才连接上。。。
你可以弄个while判断啊,直到连接上才停止尝试,如果连接不上等待若干时间重试,另外对尝试设置个上限次数,超过次数再报错。
TI中文支持网


