Cześć
Chce napisać aplikacje klient-serwer która będzie działała asynchronicznie na wielu użytkowników lecz przy próbie połączenia się z serwerem dostaje wyjątek:
- Nie można nawiązać połączenia, ponieważ komputer docelowy aktywnie go odmawia**
Nie wiem gdzie leży problem dlatego zwracam się do was o pomoc
Serwer:
public class Server
{
private static TcpListener _listener;
public static string GetMyIp()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
return ip.ToString();
}
}
throw new Exception("Nie znaleziono Ip");
}
public static void StartServer()
{
IPAddress localIp = IPAddress.Parse(GetMyIp());
IPEndPoint myLocalIp = new IPEndPoint(localIp,5000);
_listener = new TcpListener(myLocalIp);
_listener.Start();
NewClientConnected();
Console.WriteLine("Serwer uruchomiony");
}
private static void NewClientConnected()
{
object obj = new object();
_listener.BeginAcceptTcpClient(new AsyncCallback(OnClientConnect), obj);
}
private static void OnClientConnect(IAsyncResult asyncResult)
{
try
{
TcpClient socket = default(TcpClient);
socket = _listener.EndAcceptTcpClient(asyncResult);
ClientRequestHandler client = new ClientRequestHandler(socket);
client.RunClient();
}
catch (Exception)
{
throw;
}
NewClientConnected();
}
}
}
Klient:
public class Client
{
TcpClient clientSocket = new TcpClient();
NetworkStream _serNetworkStream;
public static string GetMyIp()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
return ip.ToString();
}
}
throw new Exception("Nie znaleziono Ip");
}
public void ConnectToRunningServer()
{
clientSocket.Connect(GetMyIp(), 5000);
}
public void SendMessage(string messageToSend)
{
if (!string.IsNullOrEmpty(messageToSend))
{
NetworkStream serverNetworkStream = clientSocket.GetStream();
byte[] outData = Encoding.ASCII.GetBytes(messageToSend);
serverNetworkStream.Write(outData,0, outData.Length);
serverNetworkStream.Flush();
}
}
public void CloseConnection()
{
clientSocket.Close();
}
public string ReceiveMessages()
{
StringBuilder msg = new StringBuilder();
NetworkStream serverNetworkStream = clientSocket.GetStream();
serverNetworkStream.ReadTimeout = 100;
bool isRunning = true;
while (isRunning)
{
if (serverNetworkStream.DataAvailable)
{
int readData = serverNetworkStream.ReadByte();
if (readData > 0)
{
msg.Append((char) readData);
}
else
{
break;
}
}
else if (msg.ToString().Length > 0)
{
isRunning = false;
}
}
return msg.ToString();
}
}
Będę wdzięczny za każdą pomoc