为了账号安全,请及时绑定邮箱和手机立即绑定

代码编译出错,求大神指点迷津

代码编译出错,求大神指点迷津

qq_莫非 2017-10-21 13:52:18
#include <stdio.h> #include <strings.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/time.h> #include <stdlib.h> #include <string.h> #define PORT 1234 #define BACKLOG 5 #define MAXDATASIZE 1000 typedef struct CLIENT{ int fd; char *name; struct sockaddr_in addr; char *data; }; void process_cli(CLIENT *client,char *recvbuf,int len); void savedata(char *recvbuf,int len,char *data); int main(){ int i,maxi,maxfd,sockfd;         CLIENT client[FD_SETSIZE]; int nready; ssize_t n; fd_setrset,allset; int listenfd,connectfd; struct sockaddr_in server; char recvbuf[MAXDATASIZE]; int sin_size;        if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1){ perror("Creating socket falied."); exit(1); } int opt=SO_REUSEADDR; setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); bzero(&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(PORT); server.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(listenfd,(struct sockaddr *)&server,sizeof(struct sockaddr))==1){ perror("Bind error."); exit(1); } if(listen(listenfd,BACKLOG)==-1){ perror("listen() error.\n"); exit(1); } sin_size=sizeof(struct sockaddr_in); maxfd=listenfd; maxi=-1; for(i=0;i<FD_SETSIZE;i++){ client[i].fd=-1; } FD_ZERO(&allset); FD_SET(listenfd,&allset); while(1){ struct sockaddr_in addr; rset=allset; nready=select(maxfd+1,&rset,NULL,NULL,NULL); if(FD_ISSET(listenfd,&rset)){ if((connectfd=accept(listenfd,(struct sockaddr *)&addr,&sin_size))==-1){ perror("accept() error\n"); continue; } for(i=0;i<FD_SETSIZE;i++) if(client[i].fd<0){ client[i].fd=connectfd; client[i].name=new char[MAXDATASIZE];                                         //client[i].name=(char *)malloc(MAXDATASIZE);                                         //stu[i].name=(char *)malloc(MAXDATASIZE); client[i].addr=addr; client[i].data=new char[MAXDATASIZE];                                         //stu[i].snum=(char *)malloc(MAXDATASIZE); client[i].name[0]='\0'; client[i].data[0]='\0';                                         //stu[i].name[0]='\0';                                         //stu[i].snum[0]='\0'; printf("You got a connection from %s.",inet_ntoa(client[i].addr.sin_addr)); break; } if(i==FD_SETSIZE) printf("too many clients\n"); FD_SET(connectfd,&allset); if(connectfd>maxfd) maxfd=connectfd; if(i>maxi) maxi=i; if(--nready<=0) continue; } for(i=0;i<=maxi;i++){ if((sockfd=client[i].fd)<0)) continue; if(FD_ISSET(sockfd,&rset)){ if((n=recv(sockfd,recvbuf,MAXDATASIZE,0))==0){ close(sockfd); printf("Client(%s) closed connection.User's data:%s\n",client[i].name,client[i].data); FD_CLR(sockfd,&allset); client[i].fd=-1;                                        // free(stu[i].name);                                         //free(stu[i].data); free(client[i].name); free(client[i].data); }else process_cli(&client[i],recvbuf,n); if(--nready<=0) break; } } } close(listenfd); } void process_cli(CLIENT *client,char *recvbuf,int len){ char sendbuf[MAXDATASIZE]; recvbuf[len-1]='\0'; if(strlen(client->name)==0){ memcpy(client->name,recvbuf,len); printf("Client's name is:%s.\n",client->name); return; } printf("Received client(%s) message:%s\n",client->name,recvbuf); savedata(recvbuf,len,client->data); for(int i1=0;i1<len-1;i1++){ sendbuf[i1]=recvbuf[len-i1-2]; } sendbuf[len-1]='\0'; send(client->fd,sendbuf,strlen(sendbuf),0); } void savedata(char *recvbuf,int len,char *data){ int start=strlen(data); for(int i=0;i<len;i++){ data[start+i]=recvbuf[i]; } }
查看完整描述

1 回答

?
SapereAudor

TA贡献22条经验 获得超11个赞

没有报错信息么?

查看完整回答
反对 回复 2017-10-21
  • 1 回答
  • 0 关注
  • 1022 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信