[C++/CLI] TcpClient object IP adres achterhalen.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DoubleJOnline
  • Registratie: Juni 2007
  • Laatst online: 27-05 07:07
Hallo,

Ik ben bezig met het maken van een kleine test applicatie waarbij ik een server en een client schrijf.

Ik heb al voor elkaar dat ik een client op een server connect, welke dan een simpele tekststring ontvangt en terugstuurt.

Wat ik nu graag wil, is achterhalen wat het IP adres van de client is die connect. Ik heb gekeken in de documentatie en kon daar niet iets vinden wat mij een IP-adres oplevert, dus ben ik op internet gaan zoeken waar ik het volgende artikel tegenkwam:
http://www.codeproject.co...the_ip_out_tcpclient.aspx

Echter is deze oplossing niet compitabel met de vorm van C++/CLI die ik hier gebruik. Mijn pogingen om de class te herschrijven hebben ook nog geen succes gehad, ik zit nu met het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//MyNetworkStream.h

#pragma once

using namespace System::Net::Sockets;

public ref class MyNetworkStream : public NetworkStream
{
public:
    MyNetworkStream(void) : NetworkStream(0) { };
    MyNetworkStream(System::Net::Sockets::Socket ^ s) : NetworkStream(s) { };
    
    System::Net::Sockets::Socket^ get_MySocket();
    String^ get_IPAddress(void);

};

Hierbij krijg ik de volgende foutmelding op de regel met String^ get_IPAddress(void);
error C2143: syntax error : missing ';' before '^'

Om er echter achter te komen waar het probleem precies zit, heb ik mijn functie declaraties ook weggehaald om met het volgende te komen:
code:
1
2
3
4
5
6
7
8
9
10
#pragma once

using namespace System::Net::Sockets;

public ref class MyNetworkStream : public NetworkStream
{
public:
    MyNetworkStream(void) : NetworkStream(0) { };
    MyNetworkStream(System::Net::Sockets::Socket ^ s) : NetworkStream(s) { };
};

Echter hier krijg ik ook al een foutmelding namelijk de volgende:
error C2664: 'System::Net::Sockets::NetworkStream::NetworkStream(System::Net::Sockets::Socket ^)' : cannot convert parameter 1 from 'int' to 'System::Net::Sockets::Socket ^'

Dan nu de vragen die ik hier heb:
1. Is er niet een eenvoudigere wijze om het IP adres van de client te kunnen achterhalen?

2. Hoe los ik deze laatste fout op, ik heb op internet niet een artikel kunnen vinden die mij dergelijke "Constructor" constructies heeft duidelijk gemaakt en weet dus ook niet hoe ik dit moet oplossen.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Die code is ook fout, want een String^ bestaat helemaal niet. Kijk nog eens goed naar die pagina die je zelf linkt en de code die ze daar geven.

Acties:
  • 0 Henk 'm!

  • DoubleJOnline
  • Registratie: Juni 2007
  • Laatst online: 27-05 07:07
HuHu schreef op dinsdag 27 oktober 2009 @ 14:36:
Die code is ook fout, want een String^ bestaat helemaal niet. Kijk nog eens goed naar die pagina die je zelf linkt en de code die ze daar geven.
Als ik een CLR console applicatie maak in Visual C++ 2008 dan moet ik een string op de volgende wijze aanmaken:

code:
1
String^ str = "Hello World";

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
DoubleJOnline schreef op dinsdag 27 oktober 2009 @ 14:47:
[...]


Als ik een CLR console applicatie maak in Visual C++ 2008 dan moet ik een string op de volgende wijze aanmaken:

code:
1
String^ str = "Hello World";
Maar dan zal je wel de System namespace of het String Type moeten importen.
DoubleJOnline schreef op dinsdag 27 oktober 2009 @ 14:32:
code:
1
    MyNetworkStream(void) : NetworkStream(0) { };

Echter hier krijg ik ook al een foutmelding namelijk de volgende:
error C2664: 'System::Net::Sockets::NetworkStream::NetworkStream(System::Net::Sockets::Socket ^)' : cannot convert parameter 1 from 'int' to 'System::Net::Sockets::Socket ^'
Die foutmelding is toch heel duidelijk? Hij kan een int niet converteren naar een Socket. Dan ga je in de documentatie kijken en zie je dat er inderdaad geen constructor is die een int accepteerd: http://msdn.microsoft.com...stream.networkstream.aspx

Om dat op te lossen moet je dus een constructor aanroepen die wel bestaat!

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”