c语言心跳包函数怎么写 c语言实现跳动的心

c语言编程 , 一个应用程序如何判断另外一个被监控的应用程序的存活与否?若用心跳实现,如何设置心跳机制APP-2每1分钟发一个心跳包给APP-1 。APP-1如果超过1分钟没收到c语言心跳包函数怎么写 , 可以累计记录x,收到心跳包x清零 。当x=2时c语言心跳包函数怎么写,可以发送一个ack包给APP-2,如果APP-2还是没有回应,即x=3时,可以确定APP-2down掉 。x在1~3直接时是网络阻塞 。具体操作时间还需要自行确定 。
c# c/s 之间如何做心跳检测用SOCKET,然后再看具体网络情况 , 决定是C端还是S端发起心跳包 。
一般会是C端开始工作后主动连接S端,连接成功后每过指定的时间发一个包,包的内容可以很简单,就一个0 。而S端收到后再反一个包 。这样就完成了心跳过程,如果在超出的时间没有接到客户端的心跳包,服务器则断开客户端连接 , 或者做其他操作
如何用C语言实现向某个IP发送数据包(例如4个浮点数)?使用socket()编程即可 。
1、网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符 。Socket也具有一个类似于打开文件的函数调用Socket() , 该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的 。
2、下面用Socket实现一个windows下的c语言socket通信例子,这里客户端传递一个字符串,服务器端进行接收 。
【服务器端】
#include "stdafx.h"
#include stdio.h
#include winsock2.h
#include winsock2.h
#define SERVER_PORT 5208 //侦听端口
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int ret, nLeft, length;
SOCKET sListen, sServer; //侦听套接字 , 连接套接字
struct sockaddr_in saServer, saClient; //地址信息
char *ptr;//用于遍历信息的指针
//WinSock初始化
wVersionRequested=MAKEWORD(2, 2); //希望使用的WinSock DLL 的版本
ret=WSAStartup(wVersionRequested, wsaData);
if(ret!=0)
{
printf("WSAStartup() failed!\n");
return;
}
//创建Socket,使用TCP协议
sListen=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sListen == INVALID_SOCKET)
{
WSACleanup();
printf("socket() faild!\n");
return;
}
//构建本地地址信息
saServer.sin_family = AF_INET; //地址家族
saServer.sin_port = htons(SERVER_PORT); //注意转化为网络字节序
saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //使用INADDR_ANY 指示任意地址
//绑定
ret = bind(sListen, (struct sockaddr *)saServer, sizeof(saServer));
if (ret == SOCKET_ERROR)
{
printf("bind() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //关闭套接字
WSACleanup();
return;
}
//侦听连接请求
ret = listen(sListen, 5);
if (ret == SOCKET_ERROR)
{
printf("listen() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //关闭套接字
return;
}
printf("Waiting for client connecting!\n");
printf("Tips: Ctrl c to quit!\n");
//阻塞等待接受客户端连接
while(1)//循环监听客户端,永远不停止 , 所以,在本项目中,我们没有心跳包 。
{
length = sizeof(saClient);
sServer = accept(sListen, (struct sockaddr *)saClient, length);
if (sServer == INVALID_SOCKET)
{
printf("accept() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //关闭套接字
WSACleanup();
return;
}
char receiveMessage[5000];
nLeft = sizeof(receiveMessage);
ptr = (char *)receiveMessage;
while(nLeft0)
{
//接收数据
ret = recv()(sServer, ptr, 5000, 0);
if (ret == SOCKET_ERROR)
{
printf("recv() failed!\n");
return;
}
if (ret == 0) //客户端已经关闭连接
{
printf("Client has closed the connection\n");
break;
}
nLeft -= ret;
ptr= ret;
}
printf("receive message:%s\n", receiveMessage);//打印我们接收到的消息 。
}
//closesocket(sListen);
//closesocket(sServer);
//WSACleanup();
}
【客户端】
#include "stdafx.h"
#include stdio.h
#include stdlib.h
#include winsock2.h
#define SERVER_PORT 5208 //侦听端口
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int ret;
SOCKET sClient; //连接套接字
struct sockaddr_in saServer; //地址信息
char *ptr;
BOOL fSuccess = TRUE;
//WinSock初始化
wVersionRequested = MAKEWORD(2, 2); //希望使用的WinSock DLL的版本
ret = WSAStartup(wVersionRequested, wsaData);
if(ret!=0)
{
printf("WSAStartup() failed!\n");
return;
}
//确认WinSock DLL支持版本2.2
if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2)
{
WSACleanup();
printf("Invalid WinSock version!\n");
return;
}
//创建Socket,使用TCP协议
sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sClient == INVALID_SOCKET)
{
WSACleanup();
printf("socket() failed!\n");
return;
}
//构建服务器地址信息
saServer.sin_family = AF_INET; //地址家族
saServer.sin_port = htons(SERVER_PORT); //注意转化为网络节序
saServer.sin_addr.S_un.S_addr = inet_addr("192.168.1.127");
//连接服务器
ret = connect(sClient, (struct sockaddr *)saServer, sizeof(saServer));
if (ret == SOCKET_ERROR)
{
printf("connect() failed!\n");
closesocket(sClient); //关闭套接字
WSACleanup();
return;
}
char sendMessage[]="hello this is client message!";
ret = send (sClient, (char *)sendMessage, sizeof(sendMessage), 0);
if (ret == SOCKET_ERROR)
{
printf("send() failed!\n");
}
else
printf("client info has been sent!");
closesocket(sClient); //关闭套接字
WSACleanup();
}
心跳包 。如何发送TCP空帧的心跳包,它的格式是什么?最好用c语言实现,因为我是在ARM上实现tcp协议一字节对齐
struct heartbeat_req{
short reqNum;
}
struct heartbeat_rcv{
short reqNum;
}
你所有的包都有一个公用的报文头吧,报文头里面定义一个字段记录请求类型,一个字段记录数据部分长度 , 要空帧的心跳包就发一个没数据部分的报文头,请求类型字段填心跳包类型,数据部分长度填0就行了
【c语言心跳包函数怎么写 c语言实现跳动的心】关于c语言心跳包函数怎么写和c语言实现跳动的心的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读