5283|1

2144

帖子

3

TA的资源

五彩晶圆(中级)

楼主
 

helper2416_socket_客户端 [复制链接]

好吧,我有点无聊,又写了个客户端程序,欢迎大家测试

客户端程序支持重连、心跳包和配置定时断开主动重连功能,相关参数可以通过宏进行设置。

测试同样适用TCPUDP Debug工具,创建好服务器就行了
在板子上面运行./SOCKET_CLIENT 192.168.1.101 7788

注意这里的192.168.1.101是我电脑的无线网络本机地址,端口7788是服务器创建时候指定的端口号,我的板子无线网络的本机地址是192.168.1.200
板子有线网络的本机地址是192.168.2.1,从我后面的图可以看到,我使用ssh登陆这个地址控制板子的,因为串口我会经常要用来连接板子的COM2了。
其实这个有线是无所谓的,用无线就行了。

贴出主要的代码片段,下面是重连和心跳部分,这里为什么有两个重连机制,主要是之前在lwip上面send函数有问题导致的,linux下面当然没问题了,放心用吧。
  1. if (ret == 0){
  2.                                 #if ENABLE_CLIENT_TIMEOUT_RECONNECT
  3.                                                 /* 每隔150秒重连一次 */
  4.                                                 if(re_connect_time_cnt >= (CLIENT_RECONNECTION_SEC/3)){
  5.                                                                 printf(">>>>>>>>>GOTO YUN_SERVER RECONNECTION\n");
  6.                                                                 re_connect_time_cnt = 0;
  7.                                                                 close(socket_client);
  8.                                                                 socket_client = -1;
  9.                                                                 msleep(CONNECT_PERIOD_MS);
  10.                                                                 goto re_connect;
  11.                                                 }
  12.                                 #endif
  13.                                                 printf("#Send heart to cloud\n");
  14.                                                 if (send(socket_client, heart, 12, 0) != 12) {
  15.                                                                 /* 验证send函数返回值是否有问题--在lwip中会有问题 */
  16.                                                                 printf(">>>>>>>>>SEND HEART FAILUED GOTO RECONNECTION\n");
  17.                                                                 close(socket_client);
  18.                                                                 socket_client = -1;
  19.                                                                 msleep(CONNECT_PERIOD_MS);
  20.                                                                 goto re_connect;
  21.                                                 }
  22.                                 }
复制代码


参数传递,支持DNS域名解析哦,可惜我没有服务器,虚拟了个地址,以前在lwip下面测试过,API不太一致,不过差不多的。

  1. if ( argc == 3 ) {       
  2.                 #if YUN_SERVER_DNS_ENABLE
  3.                                 printf("#Input Server DNS:%s PORT:%s", argv[1], argv[2]);
  4.                                 server_addr.sin_addr = *((struct in_addr *)remoteHost->h_addr);
  5.                                 re_dns1:
  6.                                 remoteHost = gethostbyname( argv[1] );
  7.                                 if (remoteHost == NULL) {
  8.                                                 msleep(DNS_PERIOD_MS);
  9.                                                 goto re_dns1;
  10.                                 }
  11.                 #else
  12.                                 printf("#Input Server IP:%s PORT:%s", argv[1], argv[2]);
  13.                                 if ( inet_aton(argv[1], &server_addr.sin_addr) == 0) {
  14.                                                 printf("#Error ip address\n");
  15.                                 }
  16.                 #endif
  17.                         server_addr.sin_port = htons(atoi(argv[2]));
  18.                 } else {
  19.                 #if YUN_SERVER_DNS_ENABLE
  20.                                 printf("#Default Server DNS:%s PORT:%d\n", server_dns, server_port);
  21.                                 server_addr.sin_addr = *((struct in_addr *)remoteHost->h_addr);
  22.                                 re_dns2:
  23.                                 remoteHost = gethostbyname( server_dns );
  24.                                 if (remoteHost == NULL) {
  25.                                                 msleep(DNS_PERIOD_MS);
  26.                                                 goto re_dns2;
  27.                                 }
  28.                 #else
  29.                                 printf("#Default Server IP:%s PORT:%d", server_ip, server_port);
  30.                                 if ( inet_aton(server_ip, &server_addr.sin_addr) == 0) {
  31.                                                 printf("#Error ip address\n");
  32.                                 }
  33.                 #endif
  34.                                
  35.                                 server_addr.sin_port = htons(server_port);
  36.                 }
复制代码


最后看下测试的截图

CONNECT


OPEN


QUEUE


CLOSE


重连测试,停止服务器重新打开服务器

STOP


START


SOCKET_CLIENT.zip (5.36 KB, 下载次数: 1)

SOCKET_CLIENT.zip (5.36 KB, 下载次数: 1)

点赞 关注
个人签名电工

回复
举报

2144

帖子

3

TA的资源

五彩晶圆(中级)

沙发
 
域名解析相关变量定义:

  1. #if YUN_SERVER_DNS_ENABLE
  2.                 struct hostent* remoteHost;
  3.                 const char server_dns[25] = "socket.eeworld.com";    //服务器DNS地址
  4. #else
  5.                 const char server_ip[16] = "192.168.1.200";              //测试服务器地址
  6. #endif
复制代码

 
个人签名电工
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表