Asked by:
Is UDP Sockets working on Win8, Win8.1 ?

Question
-
Hi
I need to use UDP sockets to connect to udp server. As server I have used a desktop VLC player with streaming video through UDP on 127.0.0.1:1234 . I have used next code for Win8, Win8.1 to receive data from VLC :
#include <ppl.h> #include <ppltasks.h> #include <future> using namespace Windows::Networking; using namespace Windows::Networking::Sockets; DatagramSocket ^udp; // helper to not mess with writing code for CompletedHandler's static bool PerformSync(Windows::Foundation::IAsyncAction ^op) { std::promise<bool> prom; auto fut = prom.get_future(); op->Completed = ref new Windows::Foundation::AsyncActionCompletedHandler( [&](Windows::Foundation::IAsyncAction ^op, Windows::Foundation::AsyncStatus status) { if (status == Windows::Foundation::AsyncStatus::Completed) { prom.set_value(true); } else { prom.set_value(false); } }); auto result = fut.get(); return result; } void Class1::DoTest() { HostName ^hostName = ref new HostName("localhost"); this->udp = ref new DatagramSocket(); udp->MessageReceived += ref new Windows::Foundation::TypedEventHandler<Windows::Networking::Sockets::DatagramSocket ^, Windows::Networking::Sockets::DatagramSocketMessageReceivedEventArgs ^>(this, &Class1::OnMessageReceived);
// also tried BindEndpointAsync, same result auto op = udp->ConnectAsync(hostName, "1234"); auto res = PerformSync(op); } void Class1::OnMessageReceived(Windows::Networking::Sockets::DatagramSocket ^sender, Windows::Networking::Sockets::DatagramSocketMessageReceivedEventArgs ^args) { // breakpoint on this line are never hit int stop = 234; }
Also I have tried next code on WP8.1 emulator (on WP8.0 emulator it not works), wich works perfectly:
#include <winsock2.h> #include <Ws2tcpip.h> // code inside any C++ method on wp8.1 : WSADATA wsaData; auto wVersionRequested = MAKEWORD(2, 2); auto err = WSAStartup(wVersionRequested, &wsaData); const int DefaultBufLen = 1024 * 4; char recvbuf[DefaultBufLen]; SOCKET connectSocket = INVALID_SOCKET; sockaddr_in clientService; int iResult; memset(&clientService, 0, sizeof(clientService)); clientService.sin_addr.S_un.S_un_b.s_b1 = 127; clientService.sin_addr.S_un.S_un_b.s_b2 = 0; clientService.sin_addr.S_un.S_un_b.s_b3 = 0; clientService.sin_addr.S_un.S_un_b.s_b4 = 1; clientService.sin_family = AF_INET; clientService.sin_port = htons(1234); connectSocket = socket(AF_INET, SOCK_DGRAM, 0); iResult = bind(connectSocket, (SOCKADDR*) &clientService, sizeof(clientService)); if (iResult == SOCKET_ERROR) { int stop = 234; } iResult = recv(connectSocket, recvbuf, DefaultBufLen, 0); WSACleanup();
But for some reason winsock2 available only on WP8, WP8.1 .
So is there any way to get UDP sockets to work properly on Win8, Win8.1 or it is possible only on WP8, WP8.1 ?
Thursday, July 31, 2014 10:35 AM
All replies
-
Hi Alexander - UDP networking is supported in the DatagramSocket class:
http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.sockets.datagramsocket.aspx
Are you not able to use that class?
Matt Small - Microsoft Escalation Engineer - Forum Moderator
If my reply answers your question, please mark this post as answered.
NOTE: If I ask for code, please provide something that I can drop directly into a project and run (including XAML), or an actual application project. I'm trying to help a lot of people, so I don't have time to figure out weird snippets with undefined objects and unknown namespaces.Thursday, July 31, 2014 1:27 PMModerator -
Sorry for posting not full question :) .
The code inside 1st code block have OnMessageReceived() method and it's never gets called but recv() function inside 2nd code block returns readed bytes from socket. Maybe I missed something in 1st code block ?
- Edited by Alexander.Chaikovsky Thursday, July 31, 2014 2:55 PM
Thursday, July 31, 2014 2:54 PM