bool CHttp::post(CString url, CString pstr, CString* result) { CString refer=url; url.Replace("http://",""); host=url.Left(url.Find("/")); LPHOSTENT ip= gethostbyname(host); if (ip==NULL )return false; if (!m_connect(((LPIN_ADDR)ip->h_addr)->s_addr,"80")) { *result="连接错误"; return FALSE; } //构造http头 int len; len=pstr.GetLength(); CString slen; slen.Format("%d\r\n",len); url.Replace(host,""); CString head= CString("POST ")+url+ CString(" HTTP/1.1\r\nAccept: text/html, application/xml;q=0.9, application/xhtml+xml, */*\r\n")+ CString("Content-Type: application/x-www-form-urlencoded\r\n")+ CString("Accept-Language: zh-cn\r\n")+ CString("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; );\r\n")+ CString("Host: ")+host+CString("\r\n")+ CString("Content-Length: ")+slen+ CString("Connection: Keep-Alive\r\n"); if (nfakeip.Compare("")!=0) { head+=(CString("X-Forwarded-For: ")+nfakeip+CString("\r\n")); } if (referer.Compare("")!=0) { head+=(CString("Referer: ")+referer+CString("\r\n")); } if (cookie.Compare("")!=0) { head+=(CString("Cookie: ")+cookie+CString("\r\n")); } head+=(CString("\r\n")); head+=pstr; //提交http包,结果返回到result指针。 if (!put(head,result,"")) { *result="提交数据错误"; return FALSE; } referer=refer; closesocket(MySocket); m_bConnect=FALSE; return TRUE; }
int run(char *host, char *port, int f_job) { modbus_t *ctx; uint16_t reg = 0; ctx = m_connect(host, port); switch (f_job) { case WR_BASE_LOW: m_write_register_one(ctx, APP_BASE_ADDR, APP_BASE_LOW); break; case WR_BASE_HIGH: m_write_register_one(ctx, APP_BASE_ADDR, APP_BASE_HIGH); break; case RD_BASE: m_read_register_one(ctx, APP_BASE_ADDR, ®); printf("reg[%d] = %d\n", APP_BASE_ADDR, reg); break; case RD_VAL: m_read_input_register_one(ctx, APP_VAL_ADDR, ®); printf("reg[%d] = %d\n", APP_VAL_ADDR, reg); break; default: usage(); } m_close(ctx); return 0; }
/** * Thread of the receiver socket. It handles all incoming data * and forwards it to the main event loop. */ void receiverThread() { // hold a reference count of the context auto context = m_context; zmq::socket_t receiver(*context, zmq::socket_type::sub); receiver.connect(m_addr.makeReceiverAddress()); receiver.setsockopt(ZMQ_SUBSCRIBE, "", 0); int timeout = 200; receiver.setsockopt(ZMQ_RCVTIMEO, &timeout, sizeof(timeout)); bool cancel = false; auto last_connect = std::chrono::system_clock::now(); while (!cancel) { zmq::message_t zmq_msg; bool again = !receiver.recv(&zmq_msg); if (again) { if (m_cancel) { return; } capnqml::Message msg; msg.setType(capnqml::Message::Type::Connect); push(msg); auto now = std::chrono::system_clock::now(); if (now - last_connect > std::chrono::milliseconds(m_timeout) && m_state == Channel::State::Connected) { // timeout m_state = Channel::State::Disconnected; m_loop.invoke([this]() { if (m_disconnect) { m_disconnect(); } }); } continue; } auto message = _::unpack(zmq_msg); if (message.type() == Message::Type::Connect) { last_connect = std::chrono::system_clock::now(); if (m_state == Channel::State::Disconnected && m_connect) { m_state = Channel::State::Connected; m_loop.invoke([this]() { m_connect(); }); } m_state = Channel::State::Connected; } auto fun = [this, msg = std::move(message)] { if (m_handler) { m_handler(msg); } }; m_loop.invoke(std::move(fun)); if (message.type() == Message::Type::Disconnect) { m_state = Channel::State::Disconnected; m_loop.invoke([this]() { if (m_disconnect) { m_disconnect(); } }); } } }
void ms_url(const t_symbol *s) { if(s == sym__) m_disconnect(); else m_connect(s); }
bool CHttp::getimage(CString url,CString path) { CString refer; refer=url; url.Replace("http://",""); host=url.Left(url.Find("/")); LPHOSTENT ip= ::gethostbyname(host); if (!m_connect(((LPIN_ADDR)ip->h_addr)->s_addr,"80")) { return FALSE; } //构造http头 url.Replace(host,""); CString head= CString("GET ")+url+ CString(" HTTP/1.1\r\nAccept: text/html, application/xml;q=0.9, application/xhtml+xml, */*\r\n")+ CString("Accept-Language: zh-cn\r\n")+ CString("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; );\r\n")+ CString("Host: ")+host+CString("\r\n")+ CString("Connection: Keep-Alive\r\n"); if (nfakeip.Compare("")!=0) { head+=(CString("X-Forwarded-For: ")+nfakeip+CString("\r\n")); } if (referer.Compare("")!=0) { head+=(CString("Referer: ")+referer+CString("\r\n")); } if (cookie.Compare("")!=0) { head+=(CString("Cookie: ")+cookie+CString("\r\n")); } head+=(CString("\r\n")); //提交http包,结果返回到result指针。 if (!put(head,&path,"img")) { return FALSE; } closesocket(MySocket); m_bConnect=FALSE; return TRUE; }
bool CHttp::get(CString ip,CString port,CString url,CString *result) { CString refer; refer=url; url.Replace("http://",""); host=url.Left(url.Find("/")); if (!m_connect(inet_addr(ip),port)) { *result="连接错误"; return FALSE; } //构造http头 url.Replace(host,""); CString head= CString("GET ")+refer+ CString(" HTTP/1.1\r\nAccept: text/html, application/xml;q=0.9, application/xhtml+xml, */*\r\n")+ CString("Accept-Language: zh-cn\r\n")+ CString("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; );\r\n")+ CString("Host: ")+host+CString("\r\n")+ CString("Connection: Keep-Alive\r\n"); if (nfakeip.Compare("")!=0) { head+=(CString("X-Forwarded-For: ")+nfakeip+CString("\r\n")); } if (referer.Compare("")!=0) { head+=(CString("Referer: ")+referer+CString("\r\n")); } if (cookie.Compare("")!=0) { head+=(CString("Cookie: ")+cookie+CString("\r\n")); } head+=(CString("\r\n")); //提交http包,结果返回到result指针。 if (!put(head,result,"")) { *result="提交数据错误"; return FALSE; } referer=refer; closesocket(MySocket); m_bConnect=FALSE; return TRUE; }
auto connect(const network_address address, const clock::duration timeout) { const auto any_addr = network_sockaddr{ }; ICY_EXCEPT(bind(m_socket, any_addr.data(), any_addr.size()) != SOCKET_ERROR); m_iocp.bind(m_socket); auto overlapped = OVERLAPPED{}; m_connect(m_socket, { address }, {}, overlapped); OVERLAPPED_ENTRY entry[1] = {}; if (!m_iocp.recv(entry, timeout)) return false; m_socket.option(SO_UPDATE_CONNECT_CONTEXT, 0); return true; }