Ik ben een servertje aan het bouwen met een TcpListener. Zodra er een connectie geaccepteerd wordt maak een nieuw thread aan en geef een TcpClient object mee. Nu zou ik graag willen weten van welk IP deze connectie komt (op zich geen rare eis lijkt me). Alleen is er geen enkele manier te vinden om dit te doen.
Ik heb wat op Google gezocht en vond een "oplossing" in Managed C++. Ikzelf werk in C# en zou toch zeggen dat het daar ook in moet kunnen. Ik heb het voorbeeldje omgezet naar C# en zit nu met een vrij logisch probleem. In C++ kun je kennelijk elk object naar elk ander object casten ookal zijn ze niet van hetzelfde type (of subclasse daarvan). In C# kan dit niet bij mijn weten.
Een truuc om bij het IP adres van een NetworkStream to komen is dit (vertaald van C++ naar C#):
In het C++ voorbeeld wordt nu dit gedaan:
Een static cast, iets dat C# niet ondersteund naar mijn weten. Als ik dit probeer:
Geeft dit een CastingException, uiteraard.
Maar ja, hoe moet het dan wel? Iemand een idee?
Ik heb wat op Google gezocht en vond een "oplossing" in Managed C++. Ikzelf werk in C# en zou toch zeggen dat het daar ook in moet kunnen. Ik heb het voorbeeldje omgezet naar C# en zit nu met een vrij logisch probleem. In C++ kun je kennelijk elk object naar elk ander object casten ookal zijn ze niet van hetzelfde type (of subclasse daarvan). In C# kan dit niet bij mijn weten.
Een truuc om bij het IP adres van een NetworkStream to komen is dit (vertaald van C++ naar C#):
code:
1
2
3
4
5
6
7
8
9
10
11
| class OpenNetworkStream : NetworkStream {
public OpenNetworkStream(Socket s) : base(s) { }
public Socket MySocket { get {return this.Socket; } }
public string IPAddress {
get {
return this.Socket.RemoteEndPoint.ToString();
}
}
} |
In het C++ voorbeeld wordt nu dit gedaan:
code:
1
2
| NetworkStream * networkStream = pTcpClient->GetStream(); MyNetworkStream * myStream = static_cast<MyNetworkStream *>(networkStream); |
Een static cast, iets dat C# niet ondersteund naar mijn weten. Als ik dit probeer:
code:
1
| OpenNetworkStream stream = (OpenNetworkStream)tcpclient.GetStream(); |
Geeft dit een CastingException, uiteraard.
Maar ja, hoe moet het dan wel? Iemand een idee?