Jump to content
  • Advertisement

MiXen

Member
  • Content Count

    54
  • Joined

  • Last visited

Community Reputation

215 Neutral

About MiXen

  • Rank
    Member

Personal Information

  • Interests
    Programming
  1. I'm pretty new in game development for iOS, so I looking for answer here. I've just written a game for Uniwersal Windows in almost clean C++ using DirectX. I know, that I can create apps for iOS with C++ logic, so I want to do it. I have a doubts with choosing libraries for 2D and 3D graphics and maybe for audio speaker. I want libraries, that can allow me to compress bitmaps and 3D models in that way, that I will have a good performance. So anybody know that sort of tools for iOS? I really appreciate your answers.  
  2. Hi, I have a problem with sending UDP multicast packets from phone(wifi) to laptop(wifi). In other way when I send it from laptop to phone, everything works. The code of multicast listener and sender are good, because I get it from external website and it work on wifi based on Thomson router. I notice, that my error exist in local network based on siemens gigaset 504ag router. It is a way to fix this bug?
  3. Ok, Let's start: 1. yes 2. yes 3. yes 4. yes - that I said, Wireshark gives me this info 5. no - I'm afraid, but I cannot gets this sended packed, whenether it is send by PC or phone. 6. no 7. no 8. no - I try to do it on my ported code from metronugges c# to c++ and when I try send directly, I don't see any data a ) I don't know, but I think, that problem isn't here. b) I remake my code to use multicast istead of broadcast, but the main idea is the same(i use JoinMulticastGroup to connect to one multicast group) This is dump from wireshark(no matter if it is the phone or PC, result is the same): 180    32.742286000    192.168.0.11    224.0.0.251    MDNS    48    Unknown operation (13) 0x4865 [Malformed Packet] 113    16.641300000    192.168.0.10    224.0.0.251    MDNS    48    Unknown operation (13) 0x4865 [Malformed Packet] What does it mean malformed packet?
  4. I see correct port and destination ip on wireshark. About firewall I think about it, but in Phone it's imposible :) i know, that a listener is properly working for unicast, but it doesn't see multicast packets(of Course with joinmulticastgroup). Any other ideas?
  5. Maybe the phone hardware or networking doesn't actually support broadcasts? What have you tried to do yourself in debugging? If you put a breakpoint and step through the code, what happens? What do you expect to happen differently?   This code runs well, so I don't get any exeptions. I see a send packet in wireshark, but I don't get a info about messagereceive. I don't get it why. When I have a packet in LAN, messagereceive from datagramsocket should get it, but it doesn't, why?
  6. If you're not going to actually follow the questions and instructions that people offer in this thread, you are very unlikely to get good help from the thread. You said: I asked: You said: I suggest that you actually change the datagram sample to use broadcast, without porting anything to another language. If you can make that run well with broadcast, then you can prove that your network and hardware is not the problem. If you cannot make that run with broadcast, then it's possible that your network is the problem.     Ok, If you want to know, I reply to you: Broadcast of datagram sample runs really strengly, When I send datagram from PC, I get it on the phone, but when I send it on the phone, I don't get it on the PC, I don't know why, so I start to remake this short code, but it didn't runs well. Can you look at it and say, what can be wrong with it?
  7. I don't know. I try to rewrite this metronuggest code to c++ and I get this: listener = ref new DatagramSocket();     listenerContext = ref new ListenerContextUDP(listener);     listener->MessageReceived += ref new TypedEventHandler<DatagramSocket^, DatagramSocketMessageReceivedEventArgs^>(listenerContext, &ListenerContextUDP::OnMessage);     create_task(listener->BindServiceNameAsync("22345")).then([this](task<void> previousTask)     {         HostName^ MyHostName = ref new HostName("192.168.0.11"); //        listener->JoinMulticastGroup(MyHostName);         task<IOutputStream^>(listener->GetOutputStreamAsync(MyHostName, "22345")).then([this](IOutputStream^ stream)         {             String^ stringToSend("Hello");             DataWriter^ writer = ref new DataWriter(stream);             writer->WriteString(stringToSend);             create_task(writer->StoreAsync()).then([this](task<unsigned int> writeTask)             {                 try                 {                     FW1_RECTF rect;                     rect = { 50.0f, 300.0f, 2500.0f, 300.0f };                     fontWrapper->AnalyzeString(NULL, L"data send!", L"Segoe UI", 0.0146f*width, &rect, 0xffffffff, FW1_NOFLUSH, textMainGeometry);                     writeTask.get();                 }                 catch (Exception^ exception)                 {                     if (SocketError::GetStatus(exception->HResult) == SocketErrorStatus::Unknown)                     {                         throw;                     }                 }             });         });     }); I think, that it is similar to this in C#, but is doesn't work, anybody know, why?(in wireshark I didn't see any packets in network)
  8. I'm completly out... DatagramSample runs very well, so why I should run metronuggest code? Can you exaplain for me, because it's really interesting.
  9. Yea, come on! Give drawback. This forum is a group of imbecile, no one help, everybody can give minus points.... One of the most popular forums in this threat, you should shame of this!
  10. I didn't know, that sender didn't send data to the network, because I think it does. I've checked it by wireshark and I discover this. I notice, that after send data, sender and receiver should activatet function OnMessage from my code, but it doesn't. I don't know why?   I cannot run metronuggest code, because my project isn't in c#.
  11. My code from previous post is port from this C# code to C++/CX and this code based on Microsoft sample. Did you see the previous linked datagram sample?   I use wireshark and I see, that isn't any data send to the network. Broadcast is enabled, port of receiver and sender is matching.
  12.   "datagram sample" two post ealier : https://code.msdn.microsoft.com/windowsapps/DatagramSocket-sample-76a7d82b Scroll is hard? Pleasse... Do you develop for WinRT platforms? ...   Broadcast is enabled, I check, if I get a message from host in this sample. I found this tutorial ealier? Did you notice, that this code is in C#? ...   I try to remake this sample and I done this including it to my app. Now I see, that listener and sender is create properly and data was send, but I didn't get this send data returing to the listener. I don't know, what is wrong with it. This is my code: void gameMenu::CreateUDPListener(Platform::String^ port) {          listener = ref new DatagramSocket();     listenerContext = ref new ListenerContextUDP(listener);     listener->MessageReceived += ref new TypedEventHandler<DatagramSocket^, DatagramSocketMessageReceivedEventArgs^>(listenerContext, &ListenerContextUDP::OnMessage);     create_task(listener->BindServiceNameAsync(port)).then([this](task<void> previousTask)     {         try         {             FW1_RECTF rect;             // Try getting an exception.             previousTask.get();             rect = { 50.0f, 200.0f, 2500.0f, 200.0f };             fontWrapper->AnalyzeString(NULL, L"listener!", L"Segoe UI", 0.0146f*width, &rect, 0xffffffff, FW1_NOFLUSH, textMainGeometry);         }         catch (Exception^ exception)         {             FW1_RECTF rect;             rect = { 50.0f, 350.0f, 2500.0f, 350.0f };             fontWrapper->AnalyzeString(NULL, L"error 1", L"Segoe UI", 0.0146f*width, &rect, 0xffffffff, FW1_NOFLUSH, textMainGeometry);         }     }); } void gameMenu::CreateUDPSender(Windows::Networking::HostName^ hostName, Platform::String^ port) {     socket = ref new DatagramSocket();     SocketContextUDP^ socketContextInside = ref new SocketContextUDP(socket, devRes);     socket->MessageReceived += ref new TypedEventHandler<DatagramSocket^, DatagramSocketMessageReceivedEventArgs^>(socketContextInside, &SocketContextUDP::OnMessage);     create_task(socket->ConnectAsync(hostName, port)).then([this, socketContextInside](task<void> previousTask)     {         try         {             // Try getting an exception.             previousTask.get();             socketContextInside->SetConnected();             socketContext = socketContextInside;             FW1_RECTF rect;             rect = { 50.0f, 250.0f, 2500.0f, 250.0f };             fontWrapper->AnalyzeString(NULL, L"sender!", L"Segoe UI", 0.0146f*width, &rect, 0xffffffff, FW1_NOFLUSH, textMainGeometry);         }         catch (Exception^ exception)         {             FW1_RECTF rect;             rect = { 50.0f, 350.0f, 2500.0f, 350.0f };             fontWrapper->AnalyzeString(NULL, L"error 2", L"Segoe UI", 0.0146f*width, &rect, 0xffffffff, FW1_NOFLUSH, textMainGeometry);         }     }); } void gameMenu::SendDataOverUDP(String^ data) {     if (!socketContext->IsConnected())     {         FW1_RECTF rect;         rect = { 50.0f, 300.0f, 2500.0f, 300.0f };         fontWrapper->AnalyzeString(NULL, L"no sender", L"Segoe UI", 0.0146f*width, &rect, 0xffffffff, FW1_NOFLUSH, textMainGeometry);         return;     }     create_task(socketContext->GetWriter()->StoreAsync()).then(         [this, data](task<unsigned int> writeTask)     {         try         {             // Try getting an excpetion.             writeTask.get();             FW1_RECTF rect;             rect = { 50.0f, 300.0f, 2500.0f, 300.0f };             fontWrapper->AnalyzeString(NULL, L"data send!", L"Segoe UI", 0.0146f*width, &rect, 0xffffffff, FW1_NOFLUSH, textMainGeometry);             //SendOutput->Text = "\"" + stringToSend + "\" sent successfully";         }         catch (Exception^ exception)         {             FW1_RECTF rect;             rect = { 50.0f, 350.0f, 2500.0f, 350.0f };             fontWrapper->AnalyzeString(NULL, L"error 3", L"Segoe UI", 0.0146f*width, &rect, 0xffffffff, FW1_NOFLUSH, textMainGeometry);         }     }); } SocketContextUDP::SocketContextUDP(DatagramSocket^ socket, const std::shared_ptr<DX::DeviceResources>& deviceResources) : devRes(deviceResources) {     this->socket = socket;     this->connected = false; } SocketContextUDP::~SocketContextUDP() {     // The socket (data writer) can be closed in two ways:     //  - explicit: by using delete operator (the socket or the stream used by data writer is closed even if there     //    are outstanding references to the objects).     //  - implicit: by removing last reference to it (i.e. falling out-of-scope).     // In this case this is the last reference to the socket and data writer so both will yield the same result.     delete socket;     socket = nullptr;     if (writer != nullptr)     {         delete writer;         writer = nullptr;     } } void SocketContextUDP::OnMessage(DatagramSocket^ socket, DatagramSocketMessageReceivedEventArgs^ eventArguments) {     try     {         unsigned int stringLength = eventArguments->GetDataReader()->UnconsumedBufferLength;         FW1_RECTF rect;         rect = { 50.0f, 400.0f, 2500.0f, 400.0f };         menu->GetWrapper()->AnalyzeString(NULL, L"receive data", L"Segoe UI", 0.0146f*1920.0f, &rect, 0xffffffff, FW1_NOFLUSH, menu->GetMainGeometry());         //NotifyUserFromAsyncThread("Receive data from remote peer: \"" + eventArguments->GetDataReader()->ReadString(stringLength) + "\"",NotifyType::StatusMessage);     }     catch (Exception^ exception)     {         SocketErrorStatus socketError = SocketError::GetStatus(exception->HResult);         if (socketError == SocketErrorStatus::ConnectionResetByPeer)         {             FW1_RECTF rect;             rect = { 50.0f, 400.0f, 2500.0f, 400.0f };             menu->GetWrapper()->AnalyzeString(NULL, L"err1", L"Segoe UI", 0.0146f*1920.0f, &rect, 0xffffffff, FW1_NOFLUSH, menu->GetMainGeometry());         }         else if (socketError != SocketErrorStatus::Unknown)         {             FW1_RECTF rect;             rect = { 50.0f, 400.0f, 2500.0f, 400.0f };             menu->GetWrapper()->AnalyzeString(NULL, L"err2", L"Segoe UI", 0.0146f*1920.0f, &rect, 0xffffffff, FW1_NOFLUSH, menu->GetMainGeometry());         }         else         {             FW1_RECTF rect;             rect = { 50.0f, 400.0f, 2500.0f, 400.0f };             menu->GetWrapper()->AnalyzeString(NULL, L"err3", L"Segoe UI", 0.0146f*1920.0f, &rect, 0xffffffff, FW1_NOFLUSH, menu->GetMainGeometry());             throw;         }     } } DataWriter^ SocketContextUDP::GetWriter() {     if (writer == nullptr)     {         writer = ref new DataWriter(socket->OutputStream);     }     return writer; } boolean SocketContextUDP::IsConnected() {     return connected; } void SocketContextUDP::SetConnected() {     connected = true; } void ListenerContextUDP::OnMessage(DatagramSocket^ socket, DatagramSocketMessageReceivedEventArgs^ eventArguments) {     if (outputStream != nullptr)     {         EchoMessage(eventArguments);         return;     }     // We do not have an output stream yet so create one.     create_task(socket->GetOutputStreamAsync(eventArguments->RemoteAddress, eventArguments->RemotePort)).then(         [this, socket, eventArguments](IOutputStream^ stream)     {         // It might happen that the OnMessage was invoked more than once before the GetOutputStreamAsync completed.         // In this case we will end up with multiple streams - make sure we have just one of it.         EnterCriticalSection(&lock);         if (outputStream == nullptr)         {             outputStream = stream;             hostName = eventArguments->RemoteAddress;             port = eventArguments->RemotePort;         }         LeaveCriticalSection(&lock);         EchoMessage(eventArguments);     }).then([this, socket, eventArguments](task<void> previousTask)     {         try         {             // Try getting all exceptions from the continuation chain above this point.             previousTask.get();         }         catch (Exception^ exception)         {             //NotifyUserFromAsyncThread("Getting an output stream failed with error: " + exception->Message,NotifyType::ErrorMessage);         }     }); } ListenerContextUDP::ListenerContextUDP(DatagramSocket^ listener) {     this->listener = listener;     InitializeCriticalSectionEx(&lock, 0, 0); } ListenerContextUDP::~ListenerContextUDP() {     // The listener can be closed in two ways:     //  - explicit: by using delete operator (the listener is closed even if there are outstanding references to it).     //  - implicit: by removing last reference to it (i.e. falling out-of-scope).     // In this case this is the last reference to the listener so both will yield the same result.     delete listener;     listener = nullptr;     DeleteCriticalSection(&lock); } void ListenerContextUDP::EchoMessage(DatagramSocketMessageReceivedEventArgs^ eventArguments) {     if (!IsMatching(eventArguments->RemoteAddress, eventArguments->RemotePort))     {         // In the sample we are communicating with just one peer. To communicate with multiple peers application         // should cache output streams (i.e. by using a hash map), because creating an output stream for each         // received datagram is costly. Keep in mind though, that every cache requires logic to remove old         // or unused elements; otherwise cache turns into a memory leaking structure.         //NotifyUserFromAsyncThread("Got datagram from " + eventArguments->RemoteAddress->DisplayName + ":" +eventArguments->RemotePort + ", but already 'connected' to " + hostName->DisplayName + ":" +port, NotifyType::ErrorMessage);     }     create_task(outputStream->WriteAsync(eventArguments->GetDataReader()->DetachBuffer())).then(         [this](task<unsigned int> writeTask)     {         try         {             // Try getting an exception.             writeTask.get();         }         catch (Exception^ exception)         {             //NotifyUserFromAsyncThread("Echoing a message failed with error: " + exception->Message,NotifyType::ErrorMessage);         }     }); } bool ListenerContextUDP::IsMatching(HostName^ hostName, String^ port) {     return (this->hostName == hostName && this->port == port); } Edit for ankhd: Boost.ASIO depends on the WinSock API, which just recently is now allowed on Windows Phone 8. However I'd bet that ASIO is using other APIs that are banned, that you'd have to replace. No comment...
  13. Ok, maybe nobody didn't make it for me, but giving me minus point for saying truth is ridiculus.   Backing to threat, I started from remake this datagram sample and I have one big problem, that broadcasting isn't working. My computer has adress in LAN:192.168.2.103, when I set this in program, I get message sending by its, but when I set brooadcasting adress 192.168.2.255 or 255.255.255.255, I didn't get message in this sample, can anybody help me with it?
  14. Yes, I look it there, but I'm new in internet programming, so I can't remake this sample in that way, that I want. Maybe do you have something closer to my problem?   According to my previous post to person, that gave me minus point, come on! I get drawbacks for what? For saying, that moderator isn't read carefully? No comment...
  15. Ehh... In windows phone I cannot use clear WinSock. I must use DatagramSocket. I write it clearly before, please read carefully first.
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!