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

📄 uxblastee.c

📁 vxworks下tcp通信的源代码例子server和client源代码
💻 C
字号:
/* uxBlastee.c - reads given size message from the client*/  /* Copyright 1984-1997 Wind River Systems, Inc. */   /* modification history -------------------- 01c,06nov97,mm   added copyright. 01b,26sep97,mm   cast arg 2 of bind , arg 2 of accept and arg 4 of setsockopt 01a,29jan94,ms   cleaned up and modified for VxDemo. */  #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <stdio.h> #include <netdb.h> #include <sys/times.h> #include <signal.h>  int	blastNum; int 	wdIntvl = 60;  #define	FALSE	0 #define TRUE	1  static void blastRate ();   /*****************************************************************************  * blastee - server process on UNIX host  *  * DESCRIPTION  *  *     This is a server program which communicates with client through a  *     TCP socket. It allows to configure the maximum size of socket-level   *     receive buffer. It repeatedly reads a given size message from the client  *     and reports the number of bytes read every minute.   *  * EXAMPLE:  *  *     To run this blastee task from UNIX host do the following:   *     % blastee   7000  1000  16000 &  *  *  */   main (argc, argv)     int		argc;     char	*argv [];     {     struct sockaddr_in	serverAddr; /* server's address */     struct sockaddr_in  clientAddr; /* client's address */     char   *buffer;     int	   sock;     int    snew;     int    len;     int	   size;     int	   blen;      if (argc < 4) 	{ 	printf ("usage: %s port size bufLen\n", argv [0]); 	exit (1); 	}      size = atoi (argv [2]);     blen = atoi (argv [3]);          buffer = (char *) malloc (size);      if (buffer == NULL) 	{ 	perror ("cannot allocate buffer"); 	exit (1); 	}      /* Associate SIGALARM signal with blastRate signal handler */     signal (SIGALRM, blastRate);     alarm (60); /* Start signal handler after a minute */      /* Zero out the sock_addr structures.      * This MUST be done before the socket calls.      */     bzero (&serverAddr, sizeof (serverAddr));     bzero (&clientAddr, sizeof (clientAddr));      /* Open the socket. Use ARPA Internet address format and stream sockets. */      sock = socket (AF_INET, SOCK_STREAM, 0);      if (sock < 0) 	{ 	perror ("cannot open socket"); 	exit (1); 	}     /* Set up our internet address, and bind it so the client can connect. */        serverAddr.sin_family	= AF_INET;     serverAddr.sin_port	= htons (atoi (argv [1]));      if (bind (sock, (struct sockaddr *) &serverAddr, sizeof (serverAddr)) < 0) 	{     	perror ("bind error"); 	exit (1); 	}      /* Listen, for the client to connect to us. */     if (listen (sock, 2) < 0) 	{     	perror ("listen failed"); 	exit (1); 	}          len = sizeof (clientAddr);      snew = accept (sock, (struct sockaddr *) &clientAddr, &len);     if (snew == -1)         {         perror ("accept failed");         close (sock);         exit (1);         }      blastNum = 0;      /* maximum size of socket-level receive buffer */     if (setsockopt (snew, SOL_SOCKET, SO_RCVBUF, (char *)&blen, sizeof (blen)) < 0) 	{ 	perror ("setsockopt SO_SNDBUF failed"); 	free (buffer); 	exit (1); 	}       for (;;) 	{ 	int numRead;  	if ((numRead = read (snew, buffer, size)) < 0) 	    { 	    perror ("blastee read error"); 	    break; 	    } 	 	blastNum += numRead; 	}      close (sock);     close (snew);          free (buffer);     printf ("blastee end.\n");     }  /*****************************************************************************  * blastRate - signal handler routine executed every one minute which reports  *             number of  bytes read     *  */  static void blastRate ()     {     if (blastNum > 0) 	{ 	printf ("%d bytes/sec tot %d\n", blastNum / wdIntvl, blastNum); 	blastNum = 0; 	}     else 	{ 	printf ("No bytes read in the last 60 seconds.\n"); 	}     alarm (60);     }

⌨️ 快捷键说明

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