simple udp client source code for testing.
簡単に言えば、固定フォーマットデータをUDPパケットとして指定のアドレス、ポートに投げるだけのプログラム。あちこちに転がっているものと同じ。
常にWiresharkでパケット内容を確認する必要があります。
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, char *argv[])
{
int i;
int sock;
struct sockaddr_in addr;
char *ips = "0.0.0.0";
char *ipd = "0.0.0.0";
int nPort = 12345;
int nCount = 10;
int nInt = 1000;
int c;
int bWait = 0;
opterr = 0;
while(( c = getopt(argc, argv, "s:d:p:n:t:wh")) != -1)
{
switch(c)
{
case 'h':
printf(" udps \n");
printf(" -d xxx.xxx.xxx.xxx : server IP [0.0.0.0]\n");
printf(" -p 9999 : server port [12345]\n");
printf(" -n 99999 : send packet count [10]\n");
printf(" -t 9999 : interval time [1000]msec\n");
printf(" -w : wait reply data [Not-Wait]\n");
printf(" \n");
return 0;
break;
case 's':
ips = optarg;
break;
case 'd':
ipd = optarg;
break;
case 'p':
printf("-p %p\n", optarg);
if (optarg)
nPort = atol(optarg);
break;
case 'n':
if (optarg)
nCount = atol(optarg);
break;
case 't':
if (optarg)
nInt = atol(optarg);
if (nInt <= 0)
nInt = 1;
break;
case 'w':
bWait = 1;
break;
}
}
printf("\n udps\n");
printf(" Src = %s, Dst = %s, Port=%d, Count=%d, Interval=%dmsec %s\n", ips, ipd, nPort, nCount, nInt, bWait ? "Wait" : "Not-Wait");
sock = socket(AF_INET,SOCK_DGRAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(nPort);
addr.sin_addr.s_addr = inet_addr(ipd);
for (i = 0; i < nCount; i++)
{
char szWk[257];
memset(szWk, i & 0x07f, sizeof(szWk));
sprintf(szWk, "H%04d", i);
sendto(sock,szWk, 256, 0, (struct sockaddr *)&addr, sizeof(addr));
printf("SND>>>%s", szWk);
printf("... %d\n", 256);
usleep(nInt * 1000);
if (bWait)
{
char buf[1000];
int addrlen;
char senderstr[256];
int reclen;
struct sockaddr_in r_addr;
memset(buf, 0, sizeof(buf));
addrlen = sizeof(r_addr);
reclen = recvfrom(sock, buf, sizeof(buf) - 1, 0, (struct sockaddr *)&r_addr, &addrlen);
inet_ntop(AF_INET, &r_addr.sin_addr, senderstr, sizeof(senderstr));
printf("RCV<<<%s", buf);
printf("... %s %d len=%d... ", senderstr, ntohs(addr.sin_port), reclen);
printf("\n");
}
}
sendto(sock,"END", 3, 0, (struct sockaddr *)&addr, sizeof(addr));
close(sock);
return 1;
}
0 件のコメント:
コメントを投稿