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

📄 tcpserver.c

📁 Linux平台怎么建立socket服务器端和client客户端
💻 C
字号:
/************************************************************************************* 
*Tcp server program, It is a simple example only.
*
* author:	stevenhou
*  date:	2007-08-14
*
* connect to server, and echo a message from server.
*
*************************************************************************************/


#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#include <time.h>
#include <stdarg.h>


#define LOGPATH 		"/var/log/"
#define LOGFILE "log.txt"

FILE *logfp;

#define SERVER_PORT 39000 // define the defualt connect port id
#define CLIENT_PORT (int)(20000+1+1000.0*rand()/(RAND_MAX+1.0)) // define the defualt client port as a random port
#define WRITETIMEOUT 60
#define READTIMEOUT 60
 

#define BUFFER_SIZE 102400
#define REUQEST_MESSAGE "welcome to connect the server.\n"

int printlog(FILE *logfp, char *fmt, ...)
{
	va_list ptr;
	int rv;
	time_t now;
	struct tm utctime;
	//char *index;
	char timestr[20];

	time(&now);
	gmtime_r(&now, &utctime);

	sprintf(timestr, "%02d%02d %02d:%02d:%02d", utctime.tm_mon+1, utctime.tm_mday,\
		utctime.tm_hour, utctime.tm_min, utctime.tm_sec);

	fprintf(logfp, "%s: ", timestr);
	va_start(ptr, fmt);
	rv = vfprintf(logfp, fmt,ptr);
	va_end(ptr);
	return rv;
}



void usage(char *name)
{

       printf("usage: %s IpAddr\n",name);

}

void DataProcess(int sockedid)
{

char buf[BUFFER_SIZE];   
long timestamp;

	while(1){
		memset(buf, 0, sizeof(buf));
		if (recv(sockedid, buf, 1024,0) < 0)
			break;
				
 		timestamp = time(NULL);
		if(strcmp(buf,"1001")==0){
			memset(buf,0,sizeof(buf));
			sprintf(buf,"1002");
		}else{
			printf("Recv:%s\n",buf);
			memset(buf,0,sizeof(buf));
			sprintf(buf,"OK %s",ctime(&timestamp));
			printf("Send:%s\n",buf);
		}
		if (send(sockedid, buf, strlen(buf),0) < 0)
			break;
		
		//usleep(200);

		}

}

 

int main(int argc, char **argv)
{     

       int servfd,clifd,length = 0;
       struct sockaddr_in servaddr,cliaddr;
       socklen_t socklen = sizeof(servaddr);
       char buf[BUFFER_SIZE];    
	char logfile[36];
	char writebuf[409600];
	int datalen;
	int on=1;
	char len[4]={0};
	int pid=0,i=0,port=0;
	long timestamp;
	int sin_size;

	sprintf(logfile, "%s%s", LOGPATH, LOGFILE);
	//fprintf(stderr,"logfile:%s, logfp:%d\r\n", logfile, logfp);
	logfp = fopen(logfile, "a");
	//fprintf(stderr,"logfile:%s, logfp:%d\r\n", logfile, logfp);
	setvbuf(logfp, NULL, _IONBF, 0);

       if ((servfd = socket(AF_INET,SOCK_STREAM,0)) < 0)
       {
              printf("create socket error!\n");
              exit(1);
       }

		

       bzero(&servaddr,sizeof(servaddr));
       servaddr.sin_family = AF_INET;
       servaddr.sin_addr.s_addr = htons(INADDR_ANY); 
       servaddr.sin_port = htons(SERVER_PORT);

       //servaddr.sin_addr.s_addr = htons(INADDR_ANY);


       if (bind(servfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
       {
              printf("bind to port %d failure!\n",SERVER_PORT);
              exit(1);
       } 

       if (listen(servfd,100)< 0)
       {
              printf("can't listen\n");
              exit(1);
       }      

	//setsockopt (clifd,SOL_TCP, TCP_NODELAY, &on, sizeof (on));
	sin_size = sizeof(struct sockaddr_in);
	while(1){
		if ((clifd = accept(servfd, (struct sockaddr *)&cliaddr, &sin_size)) == -1) {
			perror("accept error");
			continue;
		}
		printf("Accept from %s\n",inet_ntoa(cliaddr.sin_addr));
		if (!fork()){
			//close(servfd);
			DataProcess(clifd);
		}
		//close(clifd);
	}
		fclose(logfp);
       return 0;
}

⌨️ 快捷键说明

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