⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.c

📁 LINUX下多线程并发网络通信。(包涵源文件)
💻 C
字号:
	/* File: server.c */	#include <stdio.h>	#include <sys/types.h>	#include <sys/socket.h>	#include <netinet/in.h>	#define datasize 2048	#include <time.h>	struct tm * timeinfo;		void refreshtime()	{		time_t nowtime; 	 		time( &nowtime ); 		timeinfo = localtime( &nowtime ); 	}		struct logininfo	{		char name[20];		int inyear;		int inmonth;		int inday;		int inhour;		int inmin;		int outyear;                int outmonth;                int outday;                int outhour;                int outmin;	};		void intimebind(struct logininfo * login)	{		refreshtime();		login->inyear=timeinfo->tm_year+1900;		login->inmonth=timeinfo->tm_mon;		login->inday=timeinfo->tm_mday;		login->inhour=timeinfo->tm_hour;		login->inmin=timeinfo->tm_min;	}	 void outtimebind(struct logininfo * login)        {                refreshtime();                login->outyear=timeinfo->tm_year+1900;                login->outmonth=timeinfo->tm_mon;                login->outday=timeinfo->tm_mday;                login->outhour=timeinfo->tm_hour;                login->outmin=timeinfo->tm_min;        }	        	int readFile()	{		FILE *fp;		int i,count;		char buf[2048];		fp=fopen("record","r");		if(fp==NULL)		{				printf("Request file not found!\n");			return 0;		}		else		{			char ch;			printf("reading record.....\n");			ch=fgetc(fp);			count=0;			while(ch!=EOF)			{				buf[count++]=ch;				ch=fgetc(fp);				if(count==2048)				{					printf("record is full!");					printf("plesae clear record!\n");					break;				}			}			buf[count]='\0';		}			fclose(fp);		printf("name\tyear\tmonth\tday\thour\tmin\t");		printf("year\tmonth\tday\thour\tmin\n");		printf("%s\n",buf);		return 1;	}		void newrecord(struct logininfo * p)	{		FILE *fp;		int i;		if((fp=fopen("record","a+"))==NULL)		{			printf("Cannot open file");		}		else		{				fprintf(fp,"%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",p->name,p->inyear,p->inmonth,p->inday,p->inhour,p->inmin,p->outyear,p->outmonth,p->outday,p->outhour,p->outmin);			printf("create one new record!\n");			fclose(fp);			if(readFile()==0)			{				printf("read record failed!\n");			}		}	}		int main(int argc, char **argv)	{		int fd;		int address_len;		struct sockaddr_in address;		int listenfd;                if(readFile()==0)		{			printf("read record failed!\n");		}		fd = socket(AF_INET, SOCK_STREAM, 0);		address.sin_family = AF_INET;		address.sin_addr.s_addr = htonl(INADDR_ANY);		address.sin_port = htons(1234);		address_len = sizeof(address);		bind(fd, (struct sockaddr *)&address, address_len);		listenfd = listen(fd, 64);		while(1) {			struct sockaddr_in client_address;			int len;			int client_sockfd;			char *data = "client end!\n";			char data2[datasize];			pid_t pid;			printf("waiting...\n");			fflush(stdout);			len = sizeof(client_address);			client_sockfd = accept(fd, 				(struct sockaddr *)&client_address, &len);			if( (pid = fork()) == 0){				printf("%d\n",client_sockfd);				close(listenfd);				int i;				struct logininfo login;				intimebind(&login);				bzero((void *)data2, datasize);				read(client_sockfd,login.name,20);				for(i=0;i<3;i++)				{					read(client_sockfd,data2,datasize);					printf("server read line:%s\n", data2);				}				send(client_sockfd,data,strlen(data),0);				printf("server send line:%s\n", data);				close(client_sockfd);				outtimebind(&login);				printf("%s\t %d\t %d\t %d\t %d\t %d\t %d\t %d \t%d \t%d\t %d\n",login.name,login.inyear,login.inmonth,login.inday,login.inhour,login.inmin,login.outyear,login.outmonth,login.outday,login.outhour,login.outmin);				newrecord(&login);				exit(0);			}			close(client_sockfd);		}	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -