⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpserver.c

📁 linux环境下的运用C程序语言写的TCP远程控制程序
💻 C
字号:
/**********************************************************\*                                                         *\*  program name:tcpserver.c                               **  Author:Liang gang & Hu Xiao-qin                        *\*  Funtion:This program is just a demostrate program      *\*          to tell students how to use socket to          *\*          make a tcp communation.                        *\*  Date: 03-06-2009                                       *\*                                                         *\***********************************************************/#include<stdlib.h>#include<stdio.h>#include<sys/socket.h>#include<netdb.h>#include<string.h>#include<unistd.h>#include<netinet/in.h>#include<arpa/inet.h>#define PORT 8300int main(int argc,char** argv){	struct sockaddr_in server;	struct sockaddr_in client;	int len;	int port;	int listend;	int connectd;	int sendnum;	int opt;	int recvnum;	char send_buf[2048];	char recv_buf[2048];	char cmd[2048];	port= PORT;	memset(send_buf,0,2048);	memset(recv_buf,0,2048);	      opt = SO_REUSEADDR;            if (-1==(listend=socket(AF_INET,SOCK_STREAM,0)))      {	 perror("create listen socket error\n");	 exit(1);      }      setsockopt(listend,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));      #ifdef DEBUG	printf("the listen id is %d\n",listend);      #endif     memset(&server,0,sizeof(struct sockaddr_in));     server.sin_family = AF_INET;     server.sin_addr.s_addr = htonl(INADDR_ANY);     server.sin_port = htons(port);     if (-1==bind(listend,(struct sockaddr *)&server,sizeof(struct sockaddr)))     {	perror("bind error\n");	exit(1);     }    if (-1==listen(listend,5))    {	perror("listen error\n");	exit(1);    }    while (1)    {            if (-1==(connectd=accept(listend,(struct sockaddr*)&client,&len)))    	{		perror("create connect socket error\n");		continue;    	}     while(1)  	 { if (0>(recvnum = recv(connectd,recv_buf,sizeof(recv_buf),0)))	   {		perror("recv error\n");		close(connectd);		continue;	}	    recv_buf[recvnum]='\0';		if (0==strcmp(recv_buf,"quit"))        {		perror("the client break the server process\n");		close(connectd);		break;	}        strcpy(cmd,"/bin/");		strcat(cmd,recv_buf);		execute(cmd,send_buf);		if ('\0'==*send_buf)		{			memset(cmd,0,sizeof(cmd));			strcpy(cmd,"/sbin/");			strcat(cmd,recv_buf);			execute(cmd,send_buf);						if ('\0'==*send_buf)			{					memset(cmd,0,sizeof(cmd));				strcpy(cmd,"/usr/bin/");				strcat(cmd,recv_buf);				execute(cmd,send_buf);			}						if ('\0'==*send_buf)			{					memset(cmd,0,sizeof(cmd));				strcpy(cmd,"/usr/sbin/");				strcat(cmd,recv_buf);				execute(cmd,send_buf);			}		}		if ('\0'==*send_buf)			sprintf(send_buf,"command is not vaild,check it please\n");		printf("the server message is:%s\n",send_buf);printf ("the message from the client is: %s\n",recv_buf);        sendnum = sizeof(send_buf);        send(connectd,send_buf,sendnum,0);	 }   }    close(listend);    return 0;}int execute(char* command,char* buf){	FILE * 	fp;	int count;	if (NULL==(fp = popen(command,"r")))	{		perror("creating pipe error\n");		exit(1);	}		count = 0 ;	while(((buf[count] = fgetc(fp))!=EOF)&&count<2047)	count++;	buf[count]='\0';	pclose(fp);	return count;	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -