В последнее время я начал узнавать о сокетах Tcp / ip в c #, поэтому я посмотрел учебники и прочитал об этом в Интернете.Я следовал руководству и создал клиент-серверное приложение, которое отправляет простой текст на сервер в той же сети.Я попытался «обновить» и заставить клиента общаться с другим клиентом, который находится в другой сети через сервер.Но теперь сервер не может начать говорить, что «Запрошенный адрес недопустим в своем контексте».
First was server running as localhost, but now when I want to clients that are in different networks communicate through server , server needs to run on my ip address so other client in different network could connect. I did IPAddress ip = IPAddress.Parse("my IP"); and TcpListener server = new TcpListener(ip, 10000); I tried using different ports but its still the same.
This is what exceptions tells me
at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Bind(EndPoint localEP)
at System.Net.Sockets.TcpListener.Start(Int32 backlog)
at System.Net.Sockets.TcpListener.Start()
IPAddress ip = IPAddress.Parse("192.168.1.5"); //Mock IP
TcpListener server = new TcpListener(ip, 8080);
TcpClient client = default(TcpClient);
TcpClient client2 = default(TcpClient);
try
{
server.Start();
Console.WriteLine("Server started...");
}
catch(Exception ex)
{
Console.WriteLine("Server failed to start... {0}",ex.ToString());
Console.Read();
}
while (true)
{
client = server.AcceptTcpClient();
client2 = server.AcceptTcpClient();
byte[] receivedBuffer = new byte[1000];
byte[] receivedBuffer2 = new byte[1000];
NetworkStream stream = client.GetStream();
NetworkStream stream2 = client2.GetStream();
stream.Read(receivedBuffer, 0, receivedBuffer.Length);
stream2.Read(receivedBuffer2, 0, receivedBuffer2.Length);
StringBuilder message = new StringBuilder();
foreach (byte b in receivedBuffer)
{
if (b.Equals(126))
{
break;
}
else
{
message.Append(Convert.ToChar(b).ToString());
}
}
StringBuilder message2 = new StringBuilder();
foreach (byte g in receivedBuffer2)
{
if (g.Equals(126))
{
break;
}
else
{
message2.Append(g);
}
}
//string message = Encoding.ASCII.GetString(receivedBuffer, 0, receivedBuffer.Length);
Console.WriteLine(message.ToString() + message.Length);
Console.WriteLine(message2.ToString() +message2.Length);