mike1ocean - 2017-03-30

楼主想和http服务器的80端口建立一个udt连接,请问可行吗?
我目前写了一个demo但是报错:Connection setup failure: connection time out.
因此我想是不是因为协议类型不同因此不可行。请Prof. Gu 以及各位大大帮我解答一下!多谢!

if (  UDT::startup() == UDT::ERROR  )
            {
                cout << "UDT::startup: " << UDT::getlasterror().getErrorMessage() << "and " << strerror ( errno ) << endl;
                exit ( -1 );    
            }

            UDTSOCKET conn_serv_fd;
            struct sockaddr_in serv_addr;
            //是不是SOCK_STREAM错了?因为udp应该是SOCK_DGRAM
            if (  ( conn_serv_fd = UDT::socket ( AF_INET, SOCK_STREAM, 0 ) ) == UDT::INVALID_SOCK  )
            {
                cout << "create UDT::conn_serv_fd: " << UDT::getlasterror().getErrorMessage() << "and " << strerror ( errno ) << endl;
                exit ( -1 );
            }
            serv_addr.sin_family = AF_INET;
            serv_addr.sin_port = htons(80);//默认80端口
            serv_addr.sin_addr = *((struct in_addr *)h->h_addr);//http服务器IP地址

            // 本质是udp —— 无连接的传输,那么为何还有connect函数???
            if (  UDT::ERROR == UDT::connect ( conn_serv_fd, (struct sockaddr*)&serv_addr, sizeof(struct sockaddr) )  )
            {
                //bug: connect: Connection setup failure: connection time out.
                cout << "connect: " << UDT::getlasterror().getErrorMessage() << "and " << strerror ( errno ) << endl;
                exit ( -1 );
            }

            if (  UDT::ERROR == UDT::send ( conn_serv_fd, first_req, first_req_size, 0 )  )
            {
                cout << "send: " << UDT::getlasterror().getErrorMessage();
                exit ( -1 );
            }
            else
            {
                cout<<"send first req already!"<<endl;
            }