.NET 3.x Уведомление клиента о смене IP адреса сервера - C#

Узнай цену своей работы

Формулировка задачи:

IP Динамический передача клиенту от сервера суть такая Server IP: 192.168.1.25 (локальный) Port: 7890 Client IP: 179.189.14.25 (внешний динамический) Port: 7890 тут будет связь клиента с сервером через интернет пока адресс внешний будет не меняться как только IP(Внешний) измениться то клиент уже не сможет сойдениться с сервером Я так понял клиент шлет серверу сообщение - а сервер отвечает на него это как удочку закинуть , и на удочку чепляеться рыбка если не закинуть то и рыбки не будет, в конкретном адресе пруда)) но если клиент слал первое сообщение , то сервер должен знать адресс клиента и может отреагировав на изменения своего IP отослать клиенту клиент приймет , и будет ловить рыбу уже у другом пруду )) Вот и спрашиваю можно ли так сделать )) вот мой Сервер
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;
        }
    }
}
подкинте пример на C# как это можно , или нельзя осушетвить

Решение задачи: «.NET 3.x Уведомление клиента о смене IP адреса сервера»

textual
Листинг программы
IPHostEntry ipHost = Dns.GetHostEntry(rsa.decode("chat.example.com");
IPAddress ip = ipHost.AddressList[0];
 
//плевать как будет меняться внешний ip, его можно всегда получить хостом
//ip вяжем к клиенту и так далее..

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.375 из 5
Похожие ответы