📄 tcpserver.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(×tamp));
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 + -