📄 tcpserver.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 + -