📄 h_udp_clt1.c
字号:
/* * Copyright (C) 1999-2006 MITSUBISHI ELECTRIC CORPORATION and * RENESAS SOLUTIONS CORPORATION and * RENESAS TECHNOLOGY CORPORATION * All rights reserved. * * Test program for send() and recv() on LAN. */#include <stdio.h>#include <signal.h>#include <ctype.h>#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netinet/tcp.h>#include <netdb.h>#include "config.h"extern int errno;int sd;void sig_hdr(){ /* printf("received SIGINT.\n"); */ if (close(sd) < 0) { printf("close is NG.\n"); exit(1); } printf("close is OK.\n"); exit(0);}/* * UDP client program */main(argc, argv)int argc;char **argv;{ int i, j, sd, loop, len; char ch, buf[SIZE], buf2[SIZE]; struct sockaddr_in sinme, sindst; int addrlen; if (argc > 1) { loop = atoi(argv[1]); } else { loop = 10; } printf("loop=%d\n", loop); signal(SIGINT, sig_hdr); ch = 'A' - 0x01; for (i=0; i < sizeof(buf); i++) { if (ch < 'z') ch += 0x01; else ch = 'A'; buf[i] = ch; } for (j=1; j <= loop; j++) { /* create an endpoint for UDP communication */ if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("(%d)socket is NG.(errno=%d)\n", j, errno); break; } printf("(%d)socket is OK.\n", j); /* bind an address to the socket */ memset((char *)&sinme, 0, sizeof(struct sockaddr_in)); sinme.sin_family = AF_INET; sinme.sin_addr.s_addr = inet_addr(MY_ADDR); sinme.sin_port = htons(PORT_NUM2); if (bind(sd, (struct sockaddr *)&sinme, sizeof(sinme)) < 0) { printf("(%d)bind is NG.(errno=%d)\n", j, errno); close(sd); return (1); } printf("(%d)bind is OK.\n", j); /* send data */ memset((char *)&sindst, 0, sizeof(struct sockaddr_in)); sindst.sin_family = AF_INET; sindst.sin_addr.s_addr = inet_addr(DST_ADDR); sindst.sin_port = htons(PORT_NUM); if ((len = sendto(sd, buf, SIZE, 0, (struct sockaddr *)&sindst, sizeof(sindst))) < 0) { printf("(%d)sending UDP data is NG.\n", j); close(sd); break; } printf("(%d)sending UDP data is OK.(size=%d)\n", j, len); /* clear data contents */ memset(buf2, 0, SIZE); /* receive data */ memset((char *)&sindst, 0, sizeof(struct sockaddr_in)); addrlen = 0; if ((len = recvfrom(sd, buf2, SIZE, 0, (struct sockaddr *)&sindst, &addrlen)) < 0) { printf("(%d)receiving UDP data is NG.(errno=%d)\n", j, errno); close(sd); break; } printf("(%d)receiving UDP data is OK.(size=%d)\n", j, len); /* check data contesnts */ for (i=0; i < len; i++) { if (buf2[i] != buf[i]) { break; } } if (i < len) { printf("(%d)checking UDP data contents is NG.\n", j); close(sd); break; } printf("(%d)checking UDP data contents is OK.\n", j); if (close(sd) < 0) { printf("(%d)close is NG.(errno=%d)\n", j, errno); break; } printf("(%d)close is OK.\n\n", j); sleep(1); } /* create an endpoint for UDP communication */ if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("socket2 is NG.\n"); return (1); } printf("socket2 is OK.\n"); /* send zero byte data to terminate server */ memset((char *)&sindst, 0, sizeof(struct sockaddr_in)); sindst.sin_family = AF_INET; sindst.sin_addr.s_addr = inet_addr(DST_ADDR); sindst.sin_port = htons(PORT_NUM); if (sendto(sd, buf, 0, 0, (struct sockaddr *)&sindst, sizeof(sindst)) < 0) { printf("send2 is NG.\n"); close(sd); return (1); } printf("send2 is OK.\n"); if (close(sd) < 0) { printf("close2 is NG.\n"); return (1); } printf("close2 is OK.\n\n"); printf("Pass.\n"); sleep(2); return (0);}/* EOF */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -