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

#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];
	}
}


qq_莫非
浏览 1025回答 1
1回答

SapereAudor

没有报错信息么?
打开App,查看更多内容
随时随地看视频慕课网APP