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;
}