📄 a_udptime_svr.cpp
字号:
/* Copyright is licensed under GNU LGPL. by I.J.Wang 2005 UDP server for time service Build: make a_udptime_svr*/#include "../src/wysockfile.h"#include "../src/wysockaddrinet4.h"#include "../src/wydate.h"#include "../src/wy_uty.h"const time_t UNIX_EPOCH= 2208988800UL;static const char* syntax= "[Syntax]$./a_udptime_svr port\n";int main(int argc, char* argv[])try { if(argc!=2) { Wy::cout << syntax; return(-1); } WyRet r; uint16_t port; // convert argv[1] as the port number and save into port if((r=Wy::_strnum(port,NULL,argv[1]))!=Ok) { WY_THROW(r); } // setup server socket WySockFile svr_sock(PF_INET,SOCK_DGRAM,0); const WySockAddrINet4 SvrAddr(INADDR_ANY,port); if((r=svr_sock.bind(SvrAddr))!=Ok) { WY_THROW(r); } // endless loop: respond each incoming message by writing current time back for(;;) { WySockAddrINet4 taddr; char rbuf[256]; size_t rlen; if((r=svr_sock.recvfrom(rbuf,sizeof(rbuf)-1,0,&taddr,rlen))!=Ok) { WY_THROW(r); } rbuf[rlen]=0; // forming zero-terminate string Wy::cout << "Connection from " << Wy::wrd(taddr.ip()) << " (" << taddr.port() << "): " << rbuf << '\n'; // get current time into time_t and write it back const WyTimeSpec tm_now( Wy::now() ); time_t tm(tm_now.second()+UNIX_EPOCH); tm=htonl(tm); if((r=svr_sock.sendto(&tm,sizeof(tm),0,&taddr,rlen))!=Ok) { Wy::cerr << Wy::wrd(r) << '\n'; } if(rlen!=sizeof(tm)) { Wy::cerr << "sendto bytes is not " << sizeof(tm) << "\n"; } } // UNREACHABLE return(0);}catch(const WyRet& e) { if(e!=Ok) { Wy::cerr << Wy::wrd(e) << '\n'; } return e->c_repcode();}catch(...) { Wy::cerr << "unknown throw type\n"; return(-1);};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -