I'm developing a server-client application that uses 3 ports [TCP SOCKET .Net 4.0]..
So the application gives the user the choice to set the port for the main socket only. but I want to let the server application to automatically find available port for the other 2 sockets so it sends the port value to the client using the main socket connection. then the client connect to the other socket using the received port value.
here's a little explanation:
[i know you might say that i should use the same socket for file transfer and screenshot but its a little complicated. i just use separate sockets for each one of them.]
so how do i find an available port before bind the socket with the endpoint? something like this :
int port = 10000;
bool isAvailable = false;
while(!isAvailable)
{
try
{
// check if the port is available to use.
isAvailable = true;
}
catch
{
port++;
}
}
If the port number doesn't matter you could pass 0 for the port to the IPEndPoint
. In this case
the operating system (TCP/IP stack) assigns a free port number for you.
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
sock.Bind(new IPEndPoint(IPAddress.Parse("192.168.0.1"), 0)); // Pass 0 here.
Console.Out.WriteLine("Assigned port: {0}",
((IPEndPoint)sock.LocalEndPoint).Port);
As @GrokSrc pointed out in the comments section you should of course dispose the socket when you're done with the socket by using the Dispose()
method or the using
statement.