急linux中怎么检测TCP网络连接是否正常?
急!linux中如何检测TCP网络连接是否正常???是这样的:在嵌入式开发板上跑了一个程序,用socket和主机建立了T
急!linux中如何检测TCP网络连接是否正常???
是这样的:在嵌入式开发板上跑了一个程序,用socket和主机建立了TCP连接并进行通信,可是由于网络不好,想让程序在连接断开时(包括网线被拔掉)实现重启,然后重新运行程序和主机通信,哪位可以提供一下思路??谢了
ps:我个人曾想就在主应用程序中监测,检测网络状态,断开时就system("reboot");一下,但不知具体如何实现对网络的监测,谢谢!!!!
[解决办法]
ping某个稳定的网站
[解决办法]
建立一个超时时间T,当T秒没收到数据,认为断线,跳到某个地方,实现重启。
[解决办法]
主从之间收发心跳包,定期发送 ,一方在超过某一段时间未收到的话,认为对方下线。
[解决办法]
[解决办法][解决办法]heartbeat package.
[解决办法]网上socket教程比较多阿,既然已经建立了连接那就可以互相得到对方的包,在板子上不妨recvfrom时候不妨判断下有没有收到包,然后根据个人需要,来判断没有通信的时间,跟据时间来重启
[解决办法]心跳包要在服务端和客户端有对应的代码才行,如果你上位机是别人的话,就难了。
最简单的就是在你处理socket后,清除超时就行了。
[解决办法]可以用select,设置一个超时,给心跳单独分配一个socket。
也可以设置一个定时器
我记忆中好像网线直接拔掉阻塞的连接会一直阻塞下去。
[解决办法]C/C++ code#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <sys/wait.h>#define SERVPORT 3333 /*服务器监听端口号 */#define BACKLOG 10 /* 最大同时连接请求数 */main(){ int sin_size=0; unsigned int sockfd,client_fd; /*sock_fd:监听socket;client_fd:数据传输socket */ struct sockaddr_in my_addr; /* 本机地址信息 */ struct sockaddr_in remote_addr; /* 客户端地址信息 */ if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket创建出错!"); exit(1); } my_addr.sin_family=AF_INET; my_addr.sin_port=htons(SERVPORT); my_addr.sin_addr.s_addr = INADDR_ANY; memset(&my_addr, 0, sizeof(my_addr)); if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) { perror("bind出错!"); return 0; } if (listen(sockfd, BACKLOG) == -1) { perror("listen出错!"); return 0; } while(1) { sin_size = sizeof(struct sockaddr_in); if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size)) == -1) { perror("accept出错"); continue; } printf("received a connection from %s\n", (char *)inet_ntoa(remote_addr.sin_addr)); if (!fork()) { /* 子进程代码段 */ if (send(client_fd, "Hello, you are connected!\n", 26, 0) == -1) perror("send出错!"); close(client_fd); return 0; } close(client_fd); }}
[解决办法]
[解决办法]
程序已经些出来了,while(1),循环里,在这里给个建议,别人说的不一定都是正确的,也有可能是根据自己的经验来判断的,所以最重要的还是自己动手做,可以试试,不管什么方法都去做一下试一下是不会有坏处的,不要怕麻烦,好了,我能帮你的就这么多了,还是要靠你自己去感悟
[解决办法]
学到东西了。。哈哈