linux负载监控

linux端代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>

#include <assert.h>
#include <net/if.h>
#include <sys/ioctl.h>

#define MAXLINE 4096


int getHostIP(char *ipaddr, int interface)
{
    int                 sockfd;
    struct ifreq        req;
   
    if ((sockfd = socket(PF_INET, SOCK_DGRAM, 0))<0)
    {
        perror ("socket");
        return -1;
    }
   
    memset(&req, 0, sizeof(struct ifreq));
    sprintf(req.ifr_name, "eth%d", interface);
    // get current ip addr
    if (ioctl(sockfd, SIOCGIFADDR, (char*)&req))
    {
        perror(req.ifr_name);
        return -1;
    }
    else
    {
        struct in_addr ip_addr;
        char * tmpstr;
        ip_addr.s_addr = *((int*) &req.ifr_addr.sa_data[2]);
        tmpstr = inet_ntoa(ip_addr);
        strcpy(ipaddr, tmpstr);
    }
   
    close(sockfd);
   
    return 0;
}

int main(int argc, char** argv)
{
    int    sockfd, n;
    char    recvline[4096], sendline[4096];
    struct sockaddr_in    servaddr;
	int index=1;
	FILE * f1;
	char c[10],d[10],memory[80];
	int mem_total,mem_free;
	char tmp_str[32];
	int interface = 0;
	
	strcpy(tmp_str,"000.000.000.000");
	
	if (0 == getHostIP(tmp_str, interface))
    {
        printf("eth%d IP address is %s\n", interface,tmp_str);
    }
	
	for(;;index++)
	{
		if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
			printf("create socket error: %s(errno: %d)\n", strerror(errno),errno);
			exit(0);
		}

		memset(&servaddr, 0, sizeof(servaddr));
		servaddr.sin_family = AF_INET;
		servaddr.sin_port = htons(6666);
		if( inet_pton(AF_INET, "172.18.131.244", &servaddr.sin_addr) <= 0){
			printf("inet_pton error for %s\n","172.18.131.244");
			exit(0);
		}

		if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){
			printf("connect error: %s(errno: %d)\n",strerror(errno),errno);
			exit(0);
		}
    
		f1 = fopen("/proc/meminfo","r");  
		
		fscanf(f1, "%s\t%d\t%s",c,&mem_total,d);  
		//printf("mem total: %d\n", mem_total);  
		fscanf(f1, "%s\t%d\t%s",c,&mem_free,d);  
		//printf("mem free: %d\n", mem_free);  
		fclose(f1);  
		
		sprintf(sendline,"%s , memory total and memory free are %3d KB ; %3d KB\n",tmp_str,mem_total,mem_free);
				
		if( send(sockfd, sendline, strlen(sendline)+1,0) < 0)
		{
			printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);
			exit(0);
		}
		
		sleep(1);//1 seconds		
		close(sockfd);
	}

    exit(0);
} 


windows监控端代码:


#include <stdio.h>
#include <Winsock2.h>

#pragma comment( lib, "ws2_32.lib" )  

//
//					管理平台代码
//
void main()
{
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested = MAKEWORD( 1, 1 );

	err = WSAStartup( wVersionRequested, &wsaData );
	if ( err != 0 ) {
		return;
	}

	if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) {
			WSACleanup( );
			return;
	}

	SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);

	SOCKADDR_IN addrSrv;
	addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
	addrSrv.sin_family=AF_INET;
	addrSrv.sin_port=htons(6666);

	bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

	listen(sockSrv,5);

	SOCKADDR_IN addrClient;
	int len=sizeof(SOCKADDR);
	while(1)
	{
		SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
		//char sendBuf[50];
		//sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));
		//send(sockConn,sendBuf,strlen(sendBuf)+1,0);
		char recvBuf[80];
		recv(sockConn,recvBuf,80,0);
		printf("%s\n",recvBuf);
		closesocket(sockConn);
	}

}

如果上一个linux端的版本报错请用这个版本:

#include <stdio.h>  
#include <stdlib.h>  
#include <error.h>  
#include <string.h>  
#include <netdb.h>  
 
#include <sys/types.h>  
#include <netinet/in.h>   
#include <sys/socket.h>  
 
#include <unistd.h>   
#include <sys/ioctl.h>  

#include <net/if_arp.h>  
#include <net/if.h>  
#include <arpa/inet.h>  

int main(int argc, char** argv)  
{  	
	int    sockfd, n;  
	char   sendline[512];  
	struct sockaddr_in    servaddr;  
	int index=1;  
	FILE * f1;  
	char c[10],d[10],memory[80];  
	int mem_total,mem_free;  

	int interface = 0;  
	  
	char ipbuf[16]; 
	memset(ipbuf,'1',sizeof(ipbuf));
	
	getlocaip(ipbuf);
	  
	for(;;index++)  
	{  
		if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){  
			printf("create socket error\n");  
			exit(0);  
		}  
  
		memset(&servaddr, 0, sizeof(servaddr));  
		servaddr.sin_family = AF_INET;  
		servaddr.sin_port = htons(6666);  
		if( inet_pton(AF_INET, "192.168.0.24", &servaddr.sin_addr) <= 0){  
			printf("inet_pton error for %s\n","192.168.0.24");  
			exit(0);  
		}  
  
		if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){  
			printf("connect error\n");  
			exit(0);  
		}  
	  
		f1 = fopen("/proc/meminfo","r");    
		  
		fscanf(f1, "%s\t%d\t%s",c,&mem_total,d);    
		//printf("mem total: %d\n", mem_total);    
		fscanf(f1, "%s\t%d\t%s",c,&mem_free,d);    
		//printf("mem free: %d\n", mem_free);    
		fclose(f1);    
		  
		sprintf(sendline,"%s , memory total and memory free are %3d KB ; %3d KB\n",ipbuf,mem_total,mem_free);  
				  
		if( send(sockfd, sendline, strlen(sendline)+1,0) < 0)  
		{  
			printf("send msg error\n");  
			exit(0);  
		}  
		  
		sleep(1);//1 seconds          
		close(sockfd);  
	}  
  
	exit(0);  
}   

 
int getlocaip(char *ip)    
{  
    int sockfd;   
  
    if(-1 == (sockfd = socket(PF_INET, SOCK_STREAM, 0)))  
    {    
        //perror( "socket" );   
        return -1;   
    }  
     
    struct ifreq req;    
    struct sockaddr_in *host;  
  
    bzero(&req, sizeof(struct ifreq));   
    strcpy(req.ifr_name, "eth0");   
    ioctl(sockfd, SIOCGIFADDR, &req);   
    host = (struct sockaddr_in*)&req.ifr_addr;   
    strcpy(ip, inet_ntoa(host->sin_addr));  
	//memcpy(ip,inet_ntoa(host->sin_addr),16);
    close(sockfd);  
  
    return 1;   
} 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值