TCP C程序自动重新连接到客户端

我目前有一个使用TCP远程连接的传感器。问题是远程位置不断断开连接,这是我不知道如何纠正我的代码的情况。我对即时通讯有3/10的想法,此代码中的大部分代码来自互联网。

问题是,如何实现自动重新连接到tcp客户端的代码?尝试了很多方法,但似乎不起作用。但是,只要连接是无缝的,代码就可以完美地工作。

#include <stdio.h> 
#include <netdb.h> 
#include <netinet/in.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/socket.h> 
#include <sys/types.h> 
#include <time.h>
#define MAX 1000 
#define PORT 14344
#define SA struct sockaddr 

int main() 
{ 
        time_t t;
    time(&t);
    int sockfd,connfd,len; 
    struct sockaddr_in servaddr,cli; 
    unsigned char buff[MAX]; 
    int n,dd,a,b,c; 
    char timebuffer [80];
    time_t rawtime;
    struct tm * timeinfo;
    time ( &rawtime );
    timeinfo = localtime ( &rawtime );
        strftime (timebuffer,80,"/home/%m%d%y_%H%M%S",timeinfo);  
    FILE *fil1;
    fil1=fopen(timebuffer,"wb");

    printf("%s",ctime(&t));

    sockfd = socket(AF_INET,SOCK_STREAM,0); 
    if (sockfd == -1) { 
        printf("socket creation failed...\n"); 
        exit(0); } 
    else
        printf("Socket successfully created..\n"); 

    bzero(&servaddr,sizeof(servaddr)); 
    servaddr.sin_family = AF_INET; 
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY); 
    servaddr.sin_port = htons(PORT); 

    if ((bind(sockfd,(SA*)&servaddr,sizeof(servaddr))) != 0) { 
        printf("socket bind failed...\n"); 
        exit(0); } 
    else    
    {
        printf("Socket successfully binded..\n"); 

        if ((listen(sockfd,5)) != 0) { 
            printf("Listen failed...\n"); 
            exit(0); } 
        else
            printf("Server listening..\n");

        len = sizeof(cli); 

        connfd = accept(sockfd,(SA*)&cli,&len); 

        if (connfd < 0) { 
            printf("server accept failed...\n"); 
            exit(0); } 
        else    
            printf("server accepted...\n");

        while (1){
            bzero(buff,MAX); 
            dd=read(connfd,buff,sizeof(buff)); 
            printf("\n"); 

            for(a=0; a<=dd-1; a++){fprintf(fil1,"%c",buff[a]);printf("%02X",buff[a]);}

            printf("\n"); 
            bzero(buff,MAX);
            }
    }

        close(connfd);   
}
miaobh 回答:TCP C程序自动重新连接到客户端

必须发送一些数据。如果不发送数据,则无法保证可以检测到丢失的连接。您可以可靠地判断另一端是否仍处于连接状态的唯一方法是,如果您尝试向其发送一些数据而失败。如果不尝试,就无法知道另一端是否存在。

接下来,您必须检查read的返回值。如果出现错误,则需要关闭connfd并循环回到accept调用以获取新的连接。

本文链接:https://www.f2er.com/2893742.html

大家都在问