#!/usr/local/bin/tt

### ECHO CLIENT ###
if( argc!=4 && argc!=6 )
	dying("Usage[EchoClient(UDP)]: %s [CL-IP CL-Port] SV-IP SV-Port Message\n",CMD);

# クライアント用ソケットの作成(オプション)
if( argc==6 ){
	c_ip  =shift()						# (String) "127.0.0.1"|"localhost"
	c_port=shift()						# (String) "7"        |"echo"
	sock=udp_socket(c_ip,c_port)
	if( sock==NULL )
		dying("Error: cannot make socket!!\n")
}

# サーバーアドレスとメッセージの取得
s_ip  =shift()							# (String) "127.0.0.1"|"localhost"
s_port=shift()							# (String) "7"        |"echo"
msg   =shift()							# (String) "Hello, World!!"

disp_sockinfo(UDP_SOCKET)

# メッセージの送信(デフォルトソケットを利用)
print("%s( TXing )%s ",C_GRE,C_DEF)
ret = tx_udp(s_ip,s_port,msg)
print("To  [%s]: IP=%s Port=%s Message=\"%s\"(Length=%d)\n",lstime(time()),ip_str(s_ip),s_port,msg,ret)

disp_sockinfo(UDP_SOCKET)

# メッセージの受信(デフォルトソケットを利用)
print("%s( RXing )%s ",C_GRE,C_DEF)
(ip,port,buf,len)=rx_udp()
print("From[%s]: IP=%s Port=%d Message=\"%s\"(Lenght=%d)\n",lstime(time()),ip_str(ip),port,buf,len)

disp_sockinfo(UDP_SOCKET)

/*--1---2---3---4---5---6---7---8---9---A---B---C---D---E---F---G---H---I---J---K---L---M---N---*/
def disp_sockinfo(sock){				# ソケットの情報表示(初回時、及び、変更時)

static lo_info=NULL
static re_info=NULL

# ソケットの情報取得
	(sv_ip,sv_sip,sv_port,sv_sport,sv_type,cl_ip,cl_sip,cl_port,cl_sport,cl_type) = sockname(sock)
	lo_temp = sprint("%s[ Client(LO) ]%s IP=%s(0x%X) Port=%s(%d) Type=%s",C_RED,C_DEF,sv_sip,sv_ip,sv_sport,sv_port,sv_type)
	re_temp = sprint("%s[ <peer>(RE) ]%s IP=%s(0x%X) Port=%s(%d) Type=%s",C_BLU,C_DEF,cl_sip,cl_ip,cl_sport,cl_port,cl_type)

# 初回時、又は、変更時に表示
	if( lo_info!=lo_temp ){ lo_info = lo_temp; print("%s\n",lo_info); }
	if( re_info!=re_temp ){ re_info = re_temp; print("%s\n",re_info); }

}
