好吧,我有点无聊,又写了个客户端程序,欢迎大家测试
客户端程序支持重连、心跳包和配置定时断开主动重连功能,相关参数可以通过宏进行设置。
测试同样适用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下面当然没问题了,放心用吧。
- if (ret == 0){
- #if ENABLE_CLIENT_TIMEOUT_RECONNECT
- /* 每隔150秒重连一次 */
- if(re_connect_time_cnt >= (CLIENT_RECONNECTION_SEC/3)){
- printf(">>>>>>>>>GOTO YUN_SERVER RECONNECTION\n");
- re_connect_time_cnt = 0;
- close(socket_client);
- socket_client = -1;
- msleep(CONNECT_PERIOD_MS);
- goto re_connect;
- }
- #endif
- printf("#Send heart to cloud\n");
- if (send(socket_client, heart, 12, 0) != 12) {
- /* 验证send函数返回值是否有问题--在lwip中会有问题 */
- printf(">>>>>>>>>SEND HEART FAILUED GOTO RECONNECTION\n");
- close(socket_client);
- socket_client = -1;
- msleep(CONNECT_PERIOD_MS);
- goto re_connect;
- }
- }
复制代码
参数传递,支持DNS域名解析哦,可惜我没有服务器,虚拟了个地址,以前在lwip下面测试过,API不太一致,不过差不多的。
- if ( argc == 3 ) {
- #if YUN_SERVER_DNS_ENABLE
- printf("#Input Server DNS:%s PORT:%s", argv[1], argv[2]);
- server_addr.sin_addr = *((struct in_addr *)remoteHost->h_addr);
- re_dns1:
- remoteHost = gethostbyname( argv[1] );
- if (remoteHost == NULL) {
- msleep(DNS_PERIOD_MS);
- goto re_dns1;
- }
- #else
- printf("#Input Server IP:%s PORT:%s", argv[1], argv[2]);
- if ( inet_aton(argv[1], &server_addr.sin_addr) == 0) {
- printf("#Error ip address\n");
- }
- #endif
- server_addr.sin_port = htons(atoi(argv[2]));
- } else {
- #if YUN_SERVER_DNS_ENABLE
- printf("#Default Server DNS:%s PORT:%d\n", server_dns, server_port);
- server_addr.sin_addr = *((struct in_addr *)remoteHost->h_addr);
- re_dns2:
- remoteHost = gethostbyname( server_dns );
- if (remoteHost == NULL) {
- msleep(DNS_PERIOD_MS);
- goto re_dns2;
- }
- #else
- printf("#Default Server IP:%s PORT:%d", server_ip, server_port);
- if ( inet_aton(server_ip, &server_addr.sin_addr) == 0) {
- printf("#Error ip address\n");
- }
- #endif
-
- server_addr.sin_port = htons(server_port);
- }
复制代码
最后看下测试的截图
CONNECT
OPEN
QUEUE
CLOSE
重连测试,停止服务器重新打开服务器
STOP
START
SOCKET_CLIENT.zip
(5.36 KB, 下载次数: 1)
SOCKET_CLIENT.zip
(5.36 KB, 下载次数: 1)