I am not an expert in C ++ nor in socket communication.
I need to connect to a server and this server should respond to my request with an XML format stream.
I have created the client (inspired by other programs) with which I try to connect to the correct IP address and port by sending a RTSP call. The connection seems to be fine, but the problem is that when I run recvfrom()
I don't get any data. I tried to make a UDP client and recvfrom()
returns -1.
This is the code of the UDP client:
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();
}
In comments, you say that recvfrom()
is reporting error 10054
, which is WASECONNRESET
. The recvfrom()
documentation on MSDN says the following about that:
Error code Meaning WSAECONNRESET The virtual circuit was reset by the remote side executing a hard or abortive close. The application should close the socket; it is no longer usable. On a UDP-datagram socket this error indicates a previous send operation resulted in an ICMP Port Unreachable message.
In other words, you sent your request to a port that is not listening for UDP messages. Which makes sense, as you sent your request to port 80, which is typically used for HTTP traffic over TCP, not RTSP traffic over UDP.
For that matter, what you sent wasn't even a valid RTSP request to begin with. I suggest you read up on how the RTSP protocol actually works (hint: you don't send a rtsp://
URL with it).
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.