Click here to Skip to main content
6,597,576 members and growing! (19,584 online)
Email Password   helpLost your password?
Languages » C++ / CLI » General     Intermediate

How to get the clients IP address using TcpClient in Managed C++

By Albert Pascual

How to get the clients IP address using TcpClient in Managed C++
C++/CLI, VC6, VC7, .NET, Win2K, WinXP, Visual Studio, MFC, Dev
Posted:10 Apr 2002
Views:167,330
Bookmarked:31 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
116 votes for this article.
Popularity: 8.56 Rating: 4.15 out of 5

1

2
1 vote, 8.3%
3
1 vote, 8.3%
4
10 votes, 83.3%
5

Introduction

In managed C++ using sockets, Microsoft is giving you a whole set of new tools to use Sockets. So you don't have to create a class to handle Client and Server communications. These classes are TcpListener for the server and TcpClient.

 
TcpListener * pTcpListener;
TcpListener = new TcpListener(80);
TcpListener->Start(); 
TcpClient * pTcpClient; 
pTcpClient = m_TcpListener->AcceptTcpClient();

This opens port 80 and listens for connections. When a client connects to port 80, the function AcceptTcpClient() returns with a TcpClient class.

Those two classes together are very powerful. You should create a thread to use the TcpClient and wait again to accept another client.

The problem I had is I need it to get the IP address of the Client. I couldn't find the way to get it from the TcpClient, even after I get the Stream like this:

 NetworkStream * networkStream = pTcpClient->GetStream();
networkStream->Read(bytes, 0, (int) pTcpClient->ReceiveBufferSize);

Now that I had a NetworkStream I thought I could get the IP address, well I was wrong again. networkStream->getSocket() is a private member of the class NetworkStream.

So, to resolve this problem I had to create a derived class from NetworkStream:

//MyNetworkStream.h

#pragma once

__gc 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);
};



//MyNetworkStream.cpp file

#using <System.dll>
#using <mscorlib.dll>
using System::Net::Sockets::NetworkStream;
using System::String;

#include "myNetworkStream.h"



System::Net::Sockets::Socket * MyNetworkStream::get_MySocket()
{
	return(this->get_Socket());
}

String * MyNetworkStream::get_IPAddress(void)
{
	System::Net::Sockets::Socket *soc = get_Socket();
	System::Net::EndPoint		*Endp = soc->get_RemoteEndPoint();

	return(Endp->ToString());
}

So when you have this class, you only have to do something like that to get the client's IP address and socket:

NetworkStream * networkStream = pTcpClient->GetStream(); 
MyNetworkStream * myStream =  static_cast<MyNetworkStream *>(networkStream);
ClientIP = myStream->get_IPAddress();
Console::Write(S"Client IP Address ");
Console::WriteLine(ClientIP);
networkStream->Read(bytes, 0, (int) pTcpClient->ReceiveBufferSize);

There you go! IP address and everything. Now if you don't use TcpClient, you could AcceptSocket() instead of AcceptTcpClient() to get the socket. When you have the socket you can use get_RemoteEndPoint(), but I thought that you will like to use TcpClient.

Have fun!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Albert Pascual


Member
Al is just another Software Engineer working in C++, ASp.NET and C#. Enjoys snowboarding in Big Bear, and wait patiently for his daughters to be old enough to write code and snowboard.

Al is a Microsoft ASP.NET MVP

Blog
Occupation: Web Developer
Location: United States United States

Other popular C++ / CLI articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 25 of 29 (Total in Forum: 29) (Refresh)FirstPrevNext
GeneralIs there a way to sent stream out through a specific IP in a multi-IP server PinmemberErickJackob17:10 3 May '09  
General[Message Deleted] Pinmemberit.ragester22:42 2 Apr '09  
GeneralHow to pass TcpClient^ to a function as an argument? PinmemberAlwaysStudent20:06 10 Nov '07  
QuestionUrgent Question Answer? PinmemberBNKRAJ0:31 30 Oct '07  
Generalwhat? PinmemberSystem.Object13:21 21 Jul '06  
Generalusing TcpClient's property Pinmemberevoisard6:14 3 Jul '08  
Generalhi! Pinsussscootz334519:25 12 Jul '05  
GeneralRe: hi! PinmemberAlbert Pascual5:54 13 Jul '05  
GeneralRe: hi! (Need Help ) Pinmemberpatilabhijit4:57 10 Apr '07  
GeneralThe code seems to be wrong. PinmemberHuanlin Tsai1:46 7 May '05  
Generalneed some guide... Pinmemberchal_adiera0:10 24 Mar '05  
GeneralRe: need some guide... Pinmembermmatchyn14:54 18 Nov '05  
GeneralI need This in c++ directly using winsock, not using MFC PinsussAnonymous15:20 20 Mar '04  
Generalthanks for the description PinmemberAdam Jones12:11 17 Nov '03  
GeneralThanks very much PinsussAnonymous4:21 23 Mar '04  
GeneralRe: thanks for the description - in C++ PinmemberAndyKEnZ3:59 4 Dec '07  
Generalthe result includes port # Pinmemberduhduhduh21:02 20 Feb '03  
GeneralI need this in vb.net PinsussSoTTo5:39 29 Oct '02  
GeneralRe: I need this in vb.net PinmemberPete Bassett8:46 29 Oct '02  
GeneralRe: I need this in vb.net PinmemberPete Bassett8:52 29 Oct '02  
GeneralRe: I need this in vb.net PinsussKen Ng9:48 18 Jan '03  
GeneralRe: I need this in vb.net Pinmemberlinge22:51 23 May '06  
GeneralRe: I need this in vb.net PinmemberPolymorpher19:47 13 Mar '06  
Generalcan u make this code in to Java Pinmembersxdoss21:08 5 May '02  
GeneralRe: can u make this code in to Java PinmemberAnonymous19:14 13 Jun '02  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 10 Apr 2002
Editor: Chris Maunder
Copyright 2002 by Albert Pascual
Everything else Copyright © CodeProject, 1999-2009
Web17 | Advertise on the Code Project