#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <assert.h>
#include <time.h>
#include <sys/select.h>
#include <errno.h>
#include <strings.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* superset of previous */
#include <arpa/inet.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <netinet/tcp.h>
/**************************************************************************
**************************************************************************
*
* 主方法Main
参数argv[1] :SERVER IP
参数argv[2] :SERVER PORT
**************************************************************************
***************************************************************************/
int main(int argc, char **argv)
{
/* tcp相关参数 */
char * msg = (char *) malloc(MSGLEN*sizeof(char)); //TCP报文申请内存
struct sockaddr_in sin;
struct tcp_info info;
int len = sizeof(info);
reconnect:
/* 掉线重连 */
SystemInit(&fd , &sin , argv); // 系统初始化
if (connect (fd, (struct sockaddr *)&sin, sizeof (sin)) < 0) {
perror ("connect");
close(fd);
sleep(1);
goto reconnect;
}
printf ("Client staring...OK!\n");
while(1){
/* 判断是否掉线 */
getsockopt(fd, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
if((info.tcpi_state==TCP_ESTABLISHED));
else
{
printf("socket Reconnecting....\n");
close(fd);
sleep(1);
goto reconnect;
}
Client_Working(fd ,msg);
}
free(msg);
return 0;
}
/***************************************************
* 系统初始化
***************************************************/
static void SystemInit(int *fd , struct sockaddr_in *sin , char **argv)
{
/* 创建socket */
if ((*fd = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
perror ("Error:socket");
exit (1);
}
bzero(sin, sizeof(*sin));
sin->sin_family = AF_INET;
sin->sin_port = htons(atoi(argv[2]));
if (inet_pton (AF_INET, argv[1], (void *)&sin->sin_addr) != 1) {
perror ("Error:inet_pton");
close(*fd);
exit (1);
}
}
C语言 TCP客户端支持掉线重连
最新推荐文章于 2024-07-23 21:19:17 发布
该代码段展示了一个TCP客户端程序,实现了与服务器的连接及断线重连功能。系统初始化、套接字创建、地址解析以及TCP状态检查等关键步骤被详细地涵盖在内,确保了客户端在服务器断开连接后能够自动尝试重新建立连接。
摘要由CSDN通过智能技术生成