Hallo!
Ist es nicht völlig Wurscht, welchen AUSGEHENDER Port verwendet wird? Viel wichtiger ist es, dass der eingehende auf dem Server richtig angegeben ist.
Normalerweise ist es so, dass Windows bei einer SocketAnfrage einen beliebigen Socket zurückliefert, auf dem dann die Daten übertragen werden.
Der Server bekommt das genauso mitgeteilt, und antwortet auf diesem dann zurück!
Bei der nächsten Übertragung das selbe...
Also in Stichworten so:
- SocketAnfrage auf bestimmten Port = Kommunikationsport.
- Bei Server liefert Windows den Datenport.
Bei Clients liefert Server den Datenport.
- Daten werden übertragen.
- Datenport wird geschlossen.
- Dann kann wieder eine datenanfrage bzw Datensendewunsch auf dem Kommunikationsport übermittelt werden.
Also wenn der ausgehende Port wegen einem Router oder Firewall wichtig ist, dann kann ich sagen, dass der ausgehandelte Datenport automatisch akzeptiert wird (aufgrund des Kommuniationsports!).
Ich hoffe das hilft weiter...
Übrigens verwende ich auch direkte Socketprogrammierung ->
Für ClientVerbindungen:
#region Method OpenConnection
/// <summary>
/// Method to open a Server Connection.
/// </summary>
/// <returns>true if connection is succesful; false if connection fails.</returns>
public bool OpenConnection()
{
if (!isServer)
{
SetErrorMessage("You tried to open a Server Connection for a Client Socket!");
return false;
}
try
{
connSocket.Bind(new IPEndPoint(IPAddress.Loopback, port));
connSocket.Listen(20); // I don´t know which queue for incoming connections is useful! For Vip no queue is necessary.
receiveSocket = connSocket.Accept();
}
catch (SocketException serr)
{
string tmpString = "Socket Exception caught: " + serr.Message;
SetErrorMessage(tmpString);
}
catch (Exception err)
{
string tmpString2 = "Code Exception caught [Method: public bool OpenConnection(string ipaddress)]. Error: " + err.Message;
SetErrorMessage(tmpString2);
}
if (receiveSocket.Connected)
{
isConnected = true;
return true;
}
else
{
isConnected = false;
return false;
}
}
Für Serververbindungen:
/// <summary>
/// Method to open a Client Connection.
/// </summary>
/// <param name="ipaddress">string which includes the IP-Address in following format:
/// 'nnn.nnn.nnn.nnn'. Preceding '0's should be leaved out.</param>
/// <returns>true if connection is succesful; false if connection fails.</returns>
public bool OpenConnection(string ipaddress)
{
if (isServer)
{
SetErrorMessage("You tried to open a Client Connection for a Server Socket!");
return false;
}
try
{
connSocket.Connect(new IPEndPoint(IPAddress.Parse(ipaddress) , port));
receiveSocket = connSocket;
}
catch (SocketException serr)
{
string tmpString = "Socket Exception caught: " + serr.Message;
SetErrorMessage(tmpString);
}
catch (Exception err)
{
string tmpString2 = "Code Exception caught [Method: public bool OpenConnection(string ipaddress)]. Error: " + err.Message;
SetErrorMessage(tmpString2);
}
if (receiveSocket.Connected)
{
isConnected = true;
return true;
}
else
{
isConnected = false;
return false;
}
}
#endregion
Viel Spaß damit...
Norman-Timo