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. |