繁体   English   中英

UDP 服务器无响应

[英]No response from the UDP server

我不是 C ++ 方面的专家,也不是套接字通信方面的专家。

我需要连接到服务器,该服务器应以 XML 格式 stream 响应我的请求。

我已经创建了客户端(受其他程序启发),我尝试通过发送 RTSP 调用连接到正确的 IP 地址和端口。 连接似乎很好,但问题是当我运行recvfrom()时,我没有得到任何数据。 我试图创建一个 UDP 客户端, recvfrom()返回 -1。

这是 UDP 客户端的代码:

void main(int argc, char* argv[]) {
 
    WSADATA data;
    WORD version = MAKEWORD(2, 2);

    int wsOk = WSAStartup(version, &data);
    if (wsOk != 0) {
        cout << "can't start winsock!" << wsOk << endl;
        return;
    }
    //create a hint structure for the server
    sockaddr_in server;
    server.sin_family = AF_INET;
    server.sin_port = htons(80);

    inet_pton(AF_INET, "192.0.0.1", &server.sin_addr);

    //socket creation
    SOCKET out = socket(AF_INET, SOCK_DGRAM, 0);

    // write out to that socket
    
    string s = "rtsp://pluto:paperino@192.0.0.1/media.amp?video=0&audio=0&event=on";
    
    int sendOk = sendto(out, s.c_str(), s.size() + 1, 0, (sockaddr*)&server, sizeof(server));
    
    if (sendOk == SOCKET_ERROR) {
        cout << "That didn't work!" << WSAGetLastError() << endl;
    }
    else
    {
        cout << "connection from server is ok: " << sendOk << endl;
    }
    int len = sizeof(server);
    char buffer[1024];
    ZeroMemory(buffer, sizeof(buffer));
    int recOk = 0;
    
    recOk = recvfrom(out, buffer, sizeof(buffer), 0, (sockaddr*)&server, &len);
    if (recOk != SOCKET_ERROR)
    {
        printf("Receive response from server: %s\n", buffer);
           
    }
  

    //close the socket    
    closesocket(out);
    WSACleanup();
}

在评论中,您说recvfrom()报告错误10054 ,即WASECONNRESET MSDN 上的recvfrom()文档说明了以下内容:

错误代码 意义
WSAE连接复位 虚拟电路由远程端执行硬关闭或异常关闭重置。 应用程序应该关闭套接字; 它不再可用。 在 UDP 数据报套接字上,此错误表示先前的发送操作导致了 ICMP端口无法访问消息。

换句话说,您将请求发送到一个未侦听 UDP 消息的端口。 这是有道理的,因为您将请求发送到端口 80,该端口通常用于 TCP 上的 HTTP 流量,而不是 UDP 上的 RTSP 流量。

就此而言,您发送的甚至不是有效的 RTSP 请求。 我建议您仔细阅读RTSP 协议的实际工作原理(提示:您不要使用它发送rtsp:// URL)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM