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

📄 tcpclient.c

📁 Linux平台怎么建立socket服务器端和client客户端
💻 C
字号:
/************************************************************************************* 
*Tcp client 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);

}

 

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;
	short rcvlen=0;

	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 (argc < 2)
       {
              usage(argv[0]);
              exit(1);
       }       

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

		
       srand(time(NULL));//initialize random generator
       //port=2000+1000.0*rand()/(RAND_MAX+1.0);
       printf("Port:%d\n",CLIENT_PORT);//
       bzero(&cliaddr,sizeof(cliaddr));
       cliaddr.sin_family = AF_INET;
       cliaddr.sin_port = htons(CLIENT_PORT);
       cliaddr.sin_addr.s_addr = htons(INADDR_ANY); 

       bzero(&servaddr,sizeof(servaddr));
       servaddr.sin_family = AF_INET;
       inet_aton(argv[1],&servaddr.sin_addr);
       servaddr.sin_port = htons(SERVER_PORT);

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


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

       if (connect(clifd,(struct sockaddr*)&servaddr, socklen) < 0)
       {
              printf("can't connect to %s!\n",argv[1]);
              exit(1);
       }      
	printf("Connected %s\n",argv[1]);
	//setsockopt (clifd,SOL_TCP, TCP_NODELAY, &on, sizeof (on));
	while(1){
		sprintf(writebuf, "[Request]\r\nCommand=Set\r\nTestPlan_Ver=4.0\r\n\r\n");
		datalen = strlen(writebuf);

		sprintf(len,"%d",datalen);
		timestamp = time(NULL);
		//sprintf(buf,"%s",ctime(&timestamp));
		sprintf(buf,"%d%s",datalen,writebuf);
 
		if (send(clifd, buf, strlen(buf),0) < 0)
			return -1;
		
		read(clifd,&rcvlen,2);
		memset(buf, 0, sizeof(buf));
		if (recv(clifd, buf, rcvlen,0) < 0)
			return -1;
		printf("Return:%s\n",buf);
		sleep(1);
		i++;
		if(i>10)break;
	}

       close(clifd);

       fclose(logfp);
       return 0;

}

⌨️ 快捷键说明

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