tcp

来源:互联网 发布:js获取当前设备 编辑:程序博客网 时间:2024/05/17 05:04

tcpserver.c

#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<sys/wait.h>#include<time.h>#include<unistd.h>#define MYPORT 4000#define BACKLOG 10#define MAXDATASIZE 100//#define DEST_IP "192.168.1.166"//#define DEST_PORT 23int main(){        int sockfd,new_fd,numbytes;        struct sockaddr_in my_addr;        struct sockaddr_in their_addr;        int sin_size,choose;char inp[MAXDATASIZE],out[MAXDATASIZE];time_t t;FILE *fp;int i=0;struct tm *tm=NULL;char buf[100]="1.回显服务器\n2.时间服务器\n3.命令\n4.退出\nPlease make choose:";        if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("socket");exit(1);}        my_addr.sin_family=AF_INET;        my_addr.sin_port=htons(MYPORT);        my_addr.sin_addr.s_addr=INADDR_ANY;        bzero(&(my_addr.sin_zero),8);if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr))==-1){perror("bind");exit(1);}if(listen(sockfd,BACKLOG)==-1){perror("listen");exit(1);}while(1){sin_size=sizeof(struct sockaddr_in);if((new_fd=accept(sockfd,(struct sockaddr*)&their_addr,\&sin_size))==-1){perror("accept");continue;}printf("Server:got connection from %s\n",\inet_ntoa(their_addr.sin_addr));if(!fork()){if(write(new_fd,buf,sizeof(buf))==-1){perror("send");close(new_fd);exit(1);}while(1){if((read(new_fd,&choose,sizeof(choose)))==-1){perror("recv");exit(1);}switch(choose){case 1: numbytes=read(new_fd,inp,sizeof(inp));printf("Recevie:%s\n",inp);inp[numbytes]='\0';write(new_fd,inp,sizeof(inp));break;case 2: time(&t);tm=localtime(&t);tm->tm_year+=1900;tm->tm_mon+=1;write(new_fd,tm,sizeof(struct tm));break;case 3:numbytes = read(new_fd,buf,sizeof(buf));buf[numbytes] = '\0';if((fp = popen(buf,"r"))==NULL){perror("command");exit(1);}while(((out[i] = fgetc(fp))!=EOF)&&(i < sizeof(out))){i++;}out[i]='\0';write(new_fd,out,sizeof(out));break;case 4: close(new_fd);exit(0);default:break;}}close(new_fd);}}while(waitpid(-1,NULL,WNOHANG)>0);return 0;}

tcpclient.c

#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<netdb.h>#include<time.h>#define PORT 4000#define MAXDATASIZE 100int main(int argc,char *argv[]){        int sockfd,numbytes,choose;char buf[MAXDATASIZE],inp[MAXDATASIZE],out[MAXDATASIZE];struct hostent *he;        struct sockaddr_in their_addr;struct tm tm;        if(argc!=2)        {                fprintf(stderr,"usage:client hostname\n");                exit(1);        }        if((he=gethostbyname(argv[1]))==NULL)        {                herror("gethostbyname");                exit(1);        }        if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("socket");exit(1);}        their_addr.sin_family=AF_INET;        their_addr.sin_port=htons(PORT);        their_addr.sin_addr=*((struct in_addr*)he->h_addr);        bzero(&(their_addr.sin_zero),8);if(connect(sockfd,(struct sockaddr*)&their_addr,\sizeof(struct sockaddr))==-1){perror("connect");exit(1);}if((numbytes=read(sockfd,buf,MAXDATASIZE))==-1){perror("recv");exit(1);}buf[numbytes]='\0';printf("%s\n",buf);while(1){scanf("%d",&choose);getchar();write(sockfd,&choose,sizeof(choose));switch(choose){case 1:printf("Please input:\n");gets(inp);if(write(sockfd,inp,sizeof(inp))==-1){perror("input");close(sockfd);exit(1);}numbytes=read(sockfd,out,sizeof(out));out[numbytes]='\0';printf("Recevie:%s\n",out);printf("按enter键还回……\n");getchar();printf("%s\n",buf);break;case 2: read(sockfd,&tm,sizeof(struct tm));printf("date is:%d-%d-%d\n",tm.tm_year,\tm.tm_mon,tm.tm_mday);printf("time is:%2d:%2d:%2d\n",tm.tm_hour,\tm.tm_min,tm.tm_sec);printf("按enter键还回……\n");getchar();printf("%s\n",buf);break;case 3: printf("input command\n");gets(inp);write(sockfd,inp,sizeof(inp));numbytes = read(sockfd, buf,MAXDATASIZE);buf[numbytes] = '\0';printf("The result is:\n");printf("%s",buf);printf("按enter键还回……\n");getchar();printf("%s\n",buf);break;case 4:printf("Quit successfully!\n");exit(0);default:break;}}close(sockfd);return 0;}






原创粉丝点击