www.pudn.com > src00 > SND.C, change:2001-11-24,size:2004b
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include <netdb.h>
#include <signal.h>
#define MS 1000
#define PORT 8000
#define BUF_SIZE 2000
#define PKT_MAX 1
int count = 0;
int send_proc(int sd, char *addr, int cnt, int delay, int size)
{
struct sockaddr_in sin;
int i;
char buf[BUF_SIZE];
struct hostent *he;
int pkt_cnt = 0;
he = gethostbyname(addr);
if(he==NULL) {
perror("gethostbyname()");
return -1;
}
printf("send_to: %u.%u.%u.%u\n",
(unsigned char)he->h_addr[0],
(unsigned char)he->h_addr[1],
(unsigned char)he->h_addr[2],
(unsigned char)he->h_addr[3]);
bzero(&sin, sizeof(sin));
sin.sin_family = AF_INET;
/* sin.sin_len = sizeof(sin); */
sin.sin_port = htons(PORT);
sin.sin_addr.s_addr = *(unsigned long *)he->h_addr;
for(i=0; i<sizeof(buf); i++)
buf[i] = i%256;
while(1) {
int ret;
ret = sendto(sd, buf, size, 0, (struct sockaddr *)&sin,
sizeof(sin));
if(ret<0) {
perror("sendto()");
usleep(delay*MS);
continue;
} else
count ++;
pkt_cnt ++;
if(pkt_cnt>=cnt) {
usleep(delay*MS);
pkt_cnt = 0;
}
}
}
int create_sock(void)
{
int sd;
sd = socket(AF_INET, SOCK_DGRAM, 0);
if(sd<0) {
perror("socket()");
return -1;
}
return sd;
}
void sigint(int sig)
{
printf("count = %d\n", count);
exit(0);
}
int main(int argc, char **argv)
{
pid_t pid;
int sd = create_sock();
int delay;
int pktcnt;
int size;
if(argc!=5) {
printf("Usage: %s host PktCount DelayValue PktSize\n",
argv[0]);
exit(0);
}
signal(SIGINT, sigint);
pktcnt = atoi(argv[2]);
delay = atoi(argv[3]);
size = atoi(argv[4]);
if(size 1)
size = 1;
if(delay<0 || delay>1000) {
printf("DelayValue must >=0 && =1000\n");
exit(1);
}
if(sd<0)
exit(1);
printf("packet size: %d\n", size);
printf("send speed: %d pps\n", pktcnt*1000/delay);
send_proc(sd, argv[1], pktcnt, delay, size);
return 0;
}