[英]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.