本文整理汇总了C++中Endpoint::set_address方法的典型用法代码示例。如果您正苦于以下问题:C++ Endpoint::set_address方法的具体用法?C++ Endpoint::set_address怎么用?C++ Endpoint::set_address使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Endpoint
的用法示例。
在下文中一共展示了Endpoint::set_address方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: readEndpoint
bool UDPSocket::readEndpoint(Endpoint & ep)
{
char recv[256];
int begin = 0;
int end = 0;
string str;
string addr;
int port;
if (!endpoint_read) {
if (!wifi->sendCommand("get ip\r", NULL, recv))
return false;
wifi->exit();
str = recv;
begin = str.find("HOST=");
end = str.find("PROTO=");
if (begin != string::npos && end != string::npos) {
str = str.substr(begin + 5, end - begin - 5);
int pos = str.find(":");
if (pos != string::npos) {
addr = str.substr(0, pos);
port = atoi(str.substr(pos + 1).c_str());
ep.set_address(addr.c_str(), port);
endpoint_read = true;
wifi->flush();
return true;
}
}
wifi->flush();
}
return false;
}
示例2: main
int main() {
bool result = false;
EthernetInterface eth;
eth.init(); //Use DHCP
eth.connect();
printf("UDP client IP Address is %s\n", eth.getIPAddress());
UDPSocket sock;
sock.init();
Endpoint nist;
nist.set_address(HTTP_SERVER_NAME, HTTP_SERVER_PORT);
char out_buffer[] = "plop"; // Does not matter
sock.sendTo(nist, out_buffer, sizeof(out_buffer));
union {
char in_buffer_tab[4];
unsigned int in_buffer_uint;
};
const int n = sock.receiveFrom(nist, in_buffer_tab, sizeof(in_buffer_tab));
if (n > 0) {
result = true;
const unsigned int timeRes = ntohl(in_buffer_uint);
const float years = timeRes / 60.0 / 60.0 / 24.0 / 365;
printf("UDP: Received %d bytes from server %s on port %d\r\n", n, nist.get_address(), nist.get_port());
printf("UDP: %u seconds since 01/01/1900 00:00 GMT ... %s\r\n", timeRes, timeRes > 0 ? "[OK]" : "[FAIL]");
printf("UDP: %.2f years since 01/01/1900 00:00 GMT ... %s\r\n", years, timeRes > YEARS_TO_PASS ? "[OK]" : "[FAIL]");
if (years < YEARS_TO_PASS) {
result = false;
}
}
sock.close();
eth.disconnect();
notify_completion(result);
return 0;
}
示例3: setTime
NTPResult NTPClient::setTime(const char* host, uint16_t port, uint32_t timeout)
{
#ifdef __DEBUG__
time_t ctTime;
ctTime = time(NULL);
DBG("Time is set to (UTC): %s", ctime(&ctTime));
#endif
//Create & bind socket
DBG("Binding socket");
m_sock.bind(0); //Bind to a random port
m_sock.set_blocking(false, timeout); //Set not blocking
struct NTPPacket pkt;
//Now ping the server and wait for response
DBG("Ping");
//Prepare NTP Packet:
pkt.li = 0; //Leap Indicator : No warning
pkt.vn = 4; //Version Number : 4
pkt.mode = 3; //Client mode
pkt.stratum = 0; //Not relevant here
pkt.poll = 0; //Not significant as well
pkt.precision = 0; //Neither this one is
pkt.rootDelay = 0; //Or this one
pkt.rootDispersion = 0; //Or that one
pkt.refId = 0; //...
pkt.refTm_s = 0;
pkt.origTm_s = 0;
pkt.rxTm_s = 0;
pkt.txTm_s = htonl( NTP_TIMESTAMP_DELTA + time(NULL) ); //WARN: We are in LE format, network byte order is BE
pkt.refTm_f = pkt.origTm_f = pkt.rxTm_f = pkt.txTm_f = 0;
Endpoint outEndpoint;
if( outEndpoint.set_address(host, port) < 0)
{
m_sock.close();
return NTP_DNS;
}
//Set timeout, non-blocking and wait using select
int ret = m_sock.sendTo( outEndpoint, (char*)&pkt, sizeof(NTPPacket) );
if (ret < 0 )
{
ERR("Could not send packet");
m_sock.close();
return NTP_CONN;
}
//Read response
Endpoint inEndpoint;
DBG("Pong");
do
{
ret = m_sock.receiveFrom( inEndpoint, (char*)&pkt, sizeof(NTPPacket) ); //FIXME need a DNS Resolver to actually compare the incoming address with the DNS name
if(ret < 0)
{
ERR("Could not receive packet");
m_sock.close();
return NTP_CONN;
}
} while( strcmp(outEndpoint.get_address(), inEndpoint.get_address()) != 0 );
if(ret < sizeof(NTPPacket)) //TODO: Accept chunks
{
ERR("Receive packet size does not match");
m_sock.close();
return NTP_PRTCL;
}
if( pkt.stratum == 0) //Kiss of death message : Not good !
{
ERR("Kissed to death!");
m_sock.close();
return NTP_PRTCL;
}
//Correct Endianness
pkt.refTm_s = ntohl( pkt.refTm_s );
pkt.refTm_f = ntohl( pkt.refTm_f );
pkt.origTm_s = ntohl( pkt.origTm_s );
pkt.origTm_f = ntohl( pkt.origTm_f );
pkt.rxTm_s = ntohl( pkt.rxTm_s );
pkt.rxTm_f = ntohl( pkt.rxTm_f );
pkt.txTm_s = ntohl( pkt.txTm_s );
pkt.txTm_f = ntohl( pkt.txTm_f );
//Compute offset, see RFC 4330 p.13
uint32_t destTm_s = (NTP_TIMESTAMP_DELTA + time(NULL));
int64_t offset = ( (int64_t)( pkt.rxTm_s - pkt.origTm_s ) + (int64_t) ( pkt.txTm_s - destTm_s ) ) / 2; //Avoid overflow
DBG("Sent @%ul", pkt.txTm_s);
DBG("Offset: %lld", offset);
//Set time accordingly
set_time( time(NULL) + offset );
//.........这里部分代码省略.........