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 4096int 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 secondsclose(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; }
希望你灰暗的心情在此刻明亮起来,去迎接美好的明天!