.NET 3.x Уведомление клиента о смене IP адреса сервера - C#
Формулировка задачи:
IP Динамический передача клиенту от сервера
суть такая
Server
IP: 192.168.1.25 (локальный)
Port: 7890
Client
IP: 179.189.14.25 (внешний динамический)
Port: 7890
тут будет связь клиента с сервером через интернет
пока адресс внешний будет не меняться
как только IP(Внешний) измениться то клиент уже не сможет сойдениться с сервером
Я так понял клиент шлет серверу сообщение - а сервер отвечает на него
это как удочку закинуть , и на удочку чепляеться рыбка
если не закинуть то и рыбки не будет, в конкретном адресе пруда))
но если клиент слал первое сообщение , то сервер должен знать адресс клиента
и может отреагировав на изменения своего IP отослать клиенту
клиент приймет , и будет ловить рыбу уже у другом пруду ))
Вот и спрашиваю можно ли так сделать ))
вот мой Сервер
Клиент
подкинте пример на C# как это можно , или нельзя осушетвить
Листинг программы
- using System;
- using System.Collections.Generic;
- //using System.Linq;
- using System.Text;
- using System.Net;
- using System.Net.Sockets;
- using System.IO;
- using System.Windows.Forms;
- using WindowsFormsApplication_ip;
- using download_link;
- namespace Server
- {
- class Program
- {
- static Read_file readFile=new Read_file();
- static GetAddressIP getAddressIp=new GetAddressIP();
- static string[] read_file_ip_port()
- {
- string ip = String.Empty;
- int port = 0, ip1 = 0, ip2 = 0, ip3 = 0, ip4 = 0;
- string[] array=new string[2];
- string[] lines = readFile.Get_file_line("ip_address.txt", Encoding.GetEncoding(1251));
- try
- {
- lines = readFile.not_empty_array(lines);
- string[] ipstr = lines[0].Split('.');
- ip1 = Convert.ToInt32(ipstr[0]);
- ip2 = Convert.ToInt32(ipstr[1]);
- ip3 = Convert.ToInt32(ipstr[2]);
- ip4 = Convert.ToInt32(ipstr[3]);
- ip = ip1 + "." + ip2 + "." + ip3 + "." + ip4;
- port = Convert.ToInt32(lines[1]);
- array[0] = ip;
- array[1] = port.ToString();
- }
- catch (Exception ex)
- {
- Console.WriteLine("Ошибка: " + ex.Message);
- Console.ReadKey(true);
- Environment.Exit(0);
- }
- return array;
- }
- static void Main(string[] args)
- {
- form_consol("Сервер v 1.3");
- string ip = String.Empty;
- int port = 0,num=0;
- Console.Write("Номер IP Сетевой Адаптера: ");
- try
- {
- num = Convert.ToInt32(Console.ReadLine());
- num = num - 1;
- if (num<0)
- {
- Console.WriteLine("Ошибка номер IP не должен быть равен 0, или ниже нуля!");
- num = 0;
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("Введены символы, заместь номера IP :"+ex.Message);
- }
- ip = getAddressIp.Get_Local_IP(num);
- port = Convert.ToInt32(read_file_ip_port()[1]);
- if (ip!=String.Empty && port!=0)
- {
- Console.WriteLine("Локальный IP: "+ip+" | Порт: "+port+"\n");
- //Сервер подключаеться к локальному своему IP ПК и порту 12000 что открыт через модем в инете
- TcpListener listner = new TcpListener(new IPEndPoint(IPAddress.Parse(ip), port));
- listner.Start();
- try
- {
- while (true)
- {
- string messag = String.Empty;
- TcpClient client = listner.AcceptTcpClient();
- StreamReader sr = new StreamReader(client.GetStream());
- Console.WriteLine("Клиент : " + sr.ReadLine());
- StreamWriter sw = new StreamWriter(client.GetStream());
- sw.AutoFlush = true;
- Console.Write("Server : ");
- messag = Console.ReadLine();
- sw.WriteLine(messag);
- while (true)
- {
- Console.WriteLine("Клиент : " + sr.ReadLine());
- Console.Write("Server : ");
- messag = Console.ReadLine();
- sw.WriteLine(messag);
- }
- //sw.WriteLine("Пока");
- //client.Close();
- }
- }
- catch
- (Exception ex)
- {
- Console.WriteLine("Ошибка: " + ex.Message);
- Console.ReadKey(true);
- Environment.Exit(0);
- }
- }
- }
- static void form_consol(string title)
- {
- Console.BackgroundColor = ConsoleColor.DarkCyan;
- Console.Clear();
- Console.ForegroundColor = ConsoleColor.White;
- Console.Title = title;
- }
- }
- }
Листинг программы
- using System;
- using System.Collections.Generic;
- //using System.Linq;
- using System.Text;
- using System.Net.Sockets;
- using System.Net;
- using System.IO;
- using System.Reflection;
- using System.Windows.Forms;
- using download_link;
- namespace Client
- {
- class Program
- {
- static Read_file readFile = new Read_file();
- static string[] read_file_ip_port(string fileread)
- {
- string ip = String.Empty;
- int port = 0, ip1 = 0, ip2 = 0, ip3 = 0, ip4 = 0;
- string[] array = new string[2];
- string[] lines = readFile.Get_file_line(fileread, Encoding.GetEncoding(1251));
- try
- {
- lines = readFile.not_empty_array(lines);
- string[] ipstr = lines[0].Split('.');
- ip1 = Convert.ToInt32(ipstr[0]);
- ip2 = Convert.ToInt32(ipstr[1]);
- ip3 = Convert.ToInt32(ipstr[2]);
- ip4 = Convert.ToInt32(ipstr[3]);
- ip = ip1 + "." + ip2 + "." + ip3 + "." + ip4;
- port = Convert.ToInt32(lines[1]);
- array[0] = ip;
- array[1] = port.ToString();
- }
- catch (Exception ex)
- {
- Console.WriteLine("Ошибка: " + ex.Message);
- Console.ReadKey(true);
- Environment.Exit(0);
- }
- return array;
- }
- static void Main(string[] args)
- {
- form_consol("Клиент v 1.3");
- string fileaddress = "address.pr";
- try
- {
- string ip=String.Empty;
- int port = 0,ip1=0,ip2=0,ip3=0,ip4=0;
- ip = read_file_ip_port(fileaddress)[0];
- port = Convert.ToInt32(read_file_ip_port(fileaddress)[1]);
- if (File.Exists(fileaddress) ==false)
- {
- Console.Write("Введите IP: ");
- ip1 = Convert.ToInt32(Console.ReadLine());
- Console.Clear();
- Console.Write("Введите IP: " + ip1+".");
- ip2 = Convert.ToInt32(Console.ReadLine());
- Console.Clear();
- Console.Write("Введите IP: " + ip1 + "."+ip2+".");
- ip3 = Convert.ToInt32(Console.ReadLine());
- Console.Clear();
- Console.Write("Введите IP: " + ip1 + "."+ip2+"."+ip3+".");
- ip4 = Convert.ToInt32(Console.ReadLine());
- Console.Clear();
- Console.Write("Введите IP: " + ip1 + "."+ip2+"."+ip3+"."+ip4+"\n");
- ip = ip1 + "."+ip2+"."+ip3+"."+ip4;
- Console.WriteLine("\n\nСойдинение по IP: "+ip);
- Console.Write("\n\nВведите Порт: ");
- port = Convert.ToInt32(Console.ReadLine());
- }
- if (ip!=String.Empty && port!=0)
- {
- Console.Clear();
- TcpClient client = new TcpClient();
- Console.WriteLine("Подождите идет сойдинение....");
- //Клиент подключаеться к внешнему IP и открытому порту 12000 в инете
- //Console.WriteLine(ip);
- client.Connect(new IPEndPoint(IPAddress.Parse(ip), port));
- Console.Clear();
- while (true)
- {
- string mssage = String.Empty;
- StreamWriter sw = new StreamWriter(client.GetStream());
- sw.AutoFlush = true;
- Console.Write("Клиент : ");
- //sw.WriteLine("Привет");
- mssage = Console.ReadLine();
- sw.WriteLine(mssage);
- StreamReader sr = new StreamReader(client.GetStream());
- Console.WriteLine("Server : " + sr.ReadLine());
- while (true)
- {
- Console.Write("Клиент : ");
- mssage = Console.ReadLine();
- sw.WriteLine(mssage);
- //sw.WriteLine("Пока");
- Console.WriteLine("Server : " + sr.ReadLine());
- }
- //client.Close();
- //Console.ReadKey();
- }
- }
- else
- {
- Console.Clear();
- Console.WriteLine("Данные IP и Port , не могут быть пусты!");
- }
- }
- catch (Exception ex)
- {
- Console.Clear();
- Console.WriteLine("Ошибка: "+ex.Message);
- Console.ReadKey(true);
- Environment.Exit(0);
- }
- }
- static void form_consol(string title)
- {
- Console.BackgroundColor=ConsoleColor.DarkCyan;
- Console.Clear();
- Console.ForegroundColor=ConsoleColor.White;
- Console.Title = title;
- }
- }
- }
Решение задачи: «.NET 3.x Уведомление клиента о смене IP адреса сервера»
textual
Листинг программы
- IPHostEntry ipHost = Dns.GetHostEntry(rsa.decode("chat.example.com");
- IPAddress ip = ipHost.AddressList[0];
- //плевать как будет меняться внешний ip, его можно всегда получить хостом
- //ip вяжем к клиенту и так далее..
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д