t_udp_clt1.c

来自「T-kernel Tcp/ip Protocol Stack Sample」· C语言 代码 · 共 107 行

C
107
字号
/* *  Copyright (C) 1999-2006 MITSUBISHI ELECTRIC CORPORATION and *  RENESAS SOLUTIONS CORPORATION and *  RENESAS TECHNOLOGY CORPORATION *  All rights reserved. * *  BSD socket communication test program used for TCP/IP subsystem. */#include <tk/tkernel.h>#include <renesas_tcpip.h>#include <renesas_tcpip_common.h>#include "config.h"/* UDP client test (unix_sendto/unix_recvfrom for LOOP times) */voidtest_task(int stacd, void *exinf){        	int i, j, sd, newsd, len;	char ch, buf[SIZE], buf2[SIZE];	struct sockaddr_in sinme, sindst;	int addrlen;	ch = 'A' - 0x01;	for (i=0; i < sizeof(buf); i++) {		if (ch < 'z') ch += 0x01;		else ch = 'A';		buf[i] = ch;	}	for (j=0; j < LOOP; j++) {		if ((sd = unix_socket(AF_INET, SOCK_DGRAM, 0)) < 0) {			break;		}		memset((char *)&sinme, 0, sizeof(struct sockaddr_in));		sinme.sin_family = AF_INET;		sinme.sin_addr.s_addr = inet_addr(IFRA_ADDR);		sinme.sin_port = htons(LOCALPORT);		if (unix_bind(sd, (struct sockaddr *)&sinme, sizeof(sinme)) < 0) {			unix_close(sd);			break;		}		memset((char *)&sindst, 0, sizeof(struct sockaddr_in));		sindst.sin_family = AF_INET;		sindst.sin_addr.s_addr = inet_addr(DST_IPADDR);		sindst.sin_port = htons(DST_PORTNO);		len = unix_sendto(sd, buf, sizeof(buf), 0,			(struct sockaddr *)&sindst, sizeof(sindst));		if (len < 0) {			unix_close(sd);			break;		}		memset(buf2, 0, sizeof(buf2));		memset((char *)&sindst, 0, sizeof(struct sockaddr_in));		addrlen = 0;		if ((len = unix_recvfrom(sd, buf2, sizeof(buf2), 0,			(struct sockaddr *)&sindst, &addrlen)) < 0) {			unix_close(sd);			break;		}		/* check data contents */		for (i=0; i < len; i++) {			if (buf2[i] != buf[i]) {				break;			}		}		if (i < len) {			unix_close(sd);			break;		}		unix_close(sd);		/* sleep 1 second */#if defined(T_KERNEL)		tk_slp_tsk(1000);#endif	}	if ((sd = unix_socket(AF_INET, SOCK_DGRAM, 0)) < 0) {		goto err;	}	memset((char *)&sindst, 0, sizeof(struct sockaddr_in));	sindst.sin_family = AF_INET;	sindst.sin_addr.s_addr = inet_addr(DST_IPADDR);	sindst.sin_port = htons(DST_PORTNO);	if (unix_sendto(sd, buf, 0, 0,			(struct sockaddr *)&sindst, sizeof(sindst)) < 0) {		unix_close(sd);		goto err;	}	unix_close(sd);#if defined(T_KERNEL)	tk_slp_tsk(1000);#endiferr:#if defined(T_KERNEL)	tk_slp_tsk(TMO_FEVR);#endif}/* EOF */

⌨️ 快捷键说明

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