亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

代碼編譯出錯,求大神指點迷津

代碼編譯出錯,求大神指點迷津

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 關注
  • 1097 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號