Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C++CLI / VB .Net / .Net-Framework » UdpClient Problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.11.2004, 15:44 Uhr
Joltan



Ich habe gerade mal versucht eines der wenigen .Net C++ Beispiele von den MSDN-Webseiten etwas anzupassen und zu compilieren (VC++ 2005 mit /clr:oldSyntax Flag):

C++:
// This is the main project file for VC++ application project
// generated using an Application Wizard.

#include "stdafx.h"

using namespace System;
using namespace System::Net;
using namespace System::Text;
using namespace System::Net::Sockets;

int _tmain()
{
    // With this constructor the local port number is arbitrarily assigned.
    UdpClient __gc *udpClient = new UdpClient();
    try {
        // Define Message to send to server.
        Byte sendBytes __gc[] = Encoding::ASCII->GetBytes(S"\\info\\");

        // Send message to a different host using optional hostname and port parameters.
        UdpClient __gc *udpClientB = new UdpClient();
        udpClientB->Send(sendBytes, sendBytes->Length, S"217.103.136.229", 2303);

        //IPEndPoint object will allow us to read datagrams sent from any source.
        IPEndPoint __gc *RemoteIpEndPoint = new IPEndPoint(IPAddress::Any, 0);

        // Block until a message returns on this socket from a remote host.
        Byte receiveBytes __gc[] = udpClient->Receive(&RemoteIpEndPoint);
        String __gc *returnData = Encoding::ASCII->GetString(receiveBytes);

        // Use the IPEndPoint object to determine which of these two hosts responded.
        Console::WriteLine(String::Concat(S"This is the message you received ", returnData->ToString()));
        Console::WriteLine(String::Concat(S"This message was sent from ", RemoteIpEndPoint->Address->ToString(),
                                        S" on their port number ", __box(RemoteIpEndPoint->Port)->ToString()));

        udpClient->Close();
        udpClientB->Close();

    }  
    catch (Exception __gc *e ) {
        Console::WriteLine(e->ToString());
    }

    return 0;
}

Das Programm wird compiliert (gibt aber eine Warnung wegen Verwendung des oldsyntax-Flags), und es versucht auch auf's Netz zuzugreifen (Anfrage der Firewall), aber dann kommt nur die folgende Fehlermeldung:

Code:
System.Net.Sockets.SocketException: Ein ungültiges Argument wurde angegeben
   at System.Net.Sockets.Socket.ReceiveFrom(Byte[] buffer, Int32 offset, Int32 s
ize, SocketFlags socketFlags, EndPoint& remoteEP)
   at System.Net.Sockets.UdpClient.Receive(IPEndPoint& remoteEP)
   at main() in d:\develop\projects\test2\test2\test2.cpp:line 27


Was das Programm tun soll ist einfach: an die angegebene Adresse ein UDP Paket mit dem Inhalt "\info\" schicken, die Antwort abwarten und ausgeben. Nicht mehr und nicht weniger. Am Syntax der monierten Zeile habe ich nichts geändert - ich habe gegenüber dem Beispiel auf den MSDN-Seiten nur die Adresse und den Port geändert, sowie fehlende Namespace-Deklarationen hinzugefügt.

Wo liegt der Haken?

Dieser Post wurde am 30.11.2004 um 15:47 Uhr von Joltan editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.11.2004, 15:48 Uhr
Joltan



Oh, und wenn mich jemand auf gute Dokumentation zu diesem Thema verweisen könnte, dann wäre das sehr hilfreich!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C++CLI / VB .Net / .Net-Framework ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: