Exemplo n.º 1
0
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;  
}  
Exemplo n.º 2
0
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, &reg);
        printf("reg[%d] = %d\n", APP_BASE_ADDR, reg);
        break;
    case RD_VAL:
        m_read_input_register_one(ctx, APP_VAL_ADDR, &reg);
        printf("reg[%d] = %d\n", APP_VAL_ADDR, reg);
        break;
    default:
        usage();
    }

    m_close(ctx);

    return 0;
}
Exemplo n.º 3
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();
                 }
             });
         }
     }
 }
Exemplo n.º 4
0
 void ms_url(const t_symbol *s) 
 {
     if(s == sym__)
         m_disconnect();
     else
         m_connect(s);
 }
Exemplo n.º 5
0
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;  
}  
Exemplo n.º 6
0
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;  
}  
Exemplo n.º 7
0
            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;
            }