C# Form server Client olmadan IP göstermek

Mirza1

Hectopat
Katılım
10 Kasım 2021
Mesajlar
118
Merhaba ben C# formda yazdığım programı başkası çalıştırıyor ise benim listboxımda onun IP adresi onun listboxında benim IP adresim görünmesini istiyorum fakat 1 haftadır uğraşamama rağmen internetten bunu nasıl yapabileceğimi öğrenemedim, projemde herhangi bir server Client sistemi istemiyorum.

Cevap yazanlara şimdiden teşekkür ederim.
 
Arada herhangi bir connection olmadan senin IP'ni karşı taraf nasıl öğrenecek, vahiy yoluyla mı? Böyle bir şey mümkün değil.
 
projemin kodları aşağıda bunun üzeirnden analatır mısın?


C#:
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.Drawing;
using System.Collections.Concurrent;
using System.Linq;
using System.Threading.Tasks;

namespace ChatApp
{


    public partial class Form1 : Form
    {
        private UdpClient udpClient;
        private Thread listenThread;
        private bool isConnected = false;
        private string myName;
        private List<string> connectedIPs;
        private NotifyIcon notifyIcon;

        public Form1()
        {
            InitializeComponent();
            InitializeNotifyIcon();
            connectedIPs = new List<string>();
            this.AcceptButton = mesaj_gonder_button; // Klavyede Enter tuşuna basılınca button1'e basılma işlemini gerçekleştirir.
        }

        private void InitializeNotifyIcon()
        {
            notifyIcon = new NotifyIcon();
            notifyIcon.Icon = SystemIcons.Information;
            notifyIcon.Text = "ChatApp";
            notifyIcon.Visible = true;
            notifyIcon.BalloonTipClicked += NotifyIcon_BalloonTipClicked;

            // Bildirime tıklandığında açılacak olan formu belirleyin
            notifyIcon.DoubleClick += NotifyIcon_Double_Click;
        }

        private void NotifyIcon_Double_Click(object sender, EventArgs e)
        {
            // NotifyIcon'a tıklandığında Form'u tekrar açarız.
            this.Show();
        }

        private void NotifyIcon_BalloonTipClicked(object sender, EventArgs e)
        {
            // Baloncuk bildirime tıklandığında yapılacak işlemleri burada belirtebilirsiniz.
            // Bu örnekte herhangi bir işlem yapmıyoruz.
            this.Show();
        }

        private void Form1_Load_1(object sender, EventArgs e)
        {
            checkBox1.Checked = true;

            string bilgisayarAdi = Dns.GetHostName();
            bilgisayar_label.Text = "Bilgisayar Adı: " + bilgisayarAdi;


            // Wi-Fi bağlantısı olan bir ağ arıyoruz.
            NetworkInterface wifiInterface = null;
            foreach (NetworkInterface networkInterface in NetworkInterface.GetAllNetworkInterfaces())
            {
                if (networkInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 &&
                    networkInterface.OperationalStatus == OperationalStatus.Up)
                {
                    wifiInterface = networkInterface;
                    break;
                }
            }

            if (wifiInterface != null)
            {
                // Wi-Fi arabirimine atanan IPv4 adresini alıyoruz.
                foreach (UnicastIPAddressInformation ip in wifiInterface.GetIPProperties().UnicastAddresses)
                {
                    if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
                    {
                        ip_bilgisi.Text = ip.Address.ToString();
                        ip_label.Text = "Wi-Fi IPv4 Adresi: " + ip.Address.ToString();
                        FindIPAddressesAsync();
                        return;
                    }
                }
            }

            // Eğer Wi-Fi bağlantısı yoksa veya IPv4 adresi alınamazsa hata mesajı gösteriyoruz.
            ip_label.Text = "Wi-Fi IPv4 Adresi Bulunamadı.";


        }

        static string kullaniciAdi;
        static int port;

        private void baglan_button_Click(object sender, EventArgs e)
        {
            if (!isConnected)
            {
                try
                {
                    kullaniciAdi = isim_text.Text.Trim(); // Başlangıç ve bitiş boşlukları kaldır

                    if (string.IsNullOrEmpty(kullaniciAdi))
                    {
                        MessageBox.Show("Lütfen İsim Giriniz!");
                        return;
                    }
                    else
                    {
                        // İsim başındaki ve sonundaki boşlukları sil
                        kullaniciAdi = kullaniciAdi.Trim();

                        port = Convert.ToInt32(port_text.Text);
                        udpClient = new UdpClient(port);
                        isConnected = true;
                        myName = kullaniciAdi; // Değişiklik burada yapıldı
                        baglan_button.Text = "Bağlantıyı Kes";

                        listenThread = new Thread(new ThreadStart(ListenForMessages));
                        listenThread.IsBackground = true;
                        listenThread.Start();

                        // KATILMA MESAJI
                        string message = $"{myName} Sohbete Katıldı!";
                        byte[] data = Encoding.UTF8.GetBytes(message);

                        // Diğer cihazın IP adresi ve port numarasını alarak gönderme işlemi yapın.
                        string ipAddress = ip_text.Text;
                        IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(ipAddress), port);

                        udpClient.Send(data, data.Length, remoteEP);
                        mesajlar_list.Items.Add(message);
                        mesaj_text.Clear();
                        // KATILMA MESAJI SONU

                        // Listbox'ı aşağıya kaydıralım.
                        mesajlar_list.TopIndex = mesajlar_list.Items.Count - 1;

                        ip_text.Enabled = false;
                        port_text.Enabled = false;
                        isim_text.Enabled = false;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Hata: " + ex.Message);
                }
            }

            else
            {
                isConnected = true;
                myName = kullaniciAdi; // Değişiklik burada yapıldı

                // AYRILMA MESAJI
                string message = $"{myName} Sohbetten Ayrıldı!";
                byte[] data = Encoding.UTF8.GetBytes(message);

                // Diğer cihazın IP adresi ve port numarasını alarak gönderme işlemi yapın.
                string ipAddress = ip_text.Text;
                IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(ipAddress), port);

                udpClient.Send(data, data.Length, remoteEP);
                mesajlar_list.Items.Add(message);
                mesaj_text.Clear();
                // AYRILMA MESAJI SONU

                // Listbox'ı aşağıya kaydıralım.
                mesajlar_list.TopIndex = mesajlar_list.Items.Count - 1;

                isConnected = false;
                udpClient.Close();
                baglan_button.Text = "Bağlan";

                ip_text.Enabled = true;
                port_text.Enabled = true;
                isim_text.Enabled = true;
            }
        }

        private void gonder_button_Click(object sender, EventArgs e)
        {
            if (isConnected)
            {
                try
                {
                    // Eğer mesaj textbox boş değilse mesajı gönder
                    if (!string.IsNullOrWhiteSpace(mesaj_text.Text))
                    {
                        string message = $"{myName}: {mesaj_text.Text}";
                        byte[] data = Encoding.UTF8.GetBytes(message);

                        // Diğer cihazın IP adresi ve port numarasını alarak gönderme işlemi yapın.
                        string ipAddress = ip_text.Text;
                        int port = Convert.ToInt32(port_text.Text);
                        IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(ipAddress), port);

                        udpClient.Send(data, data.Length, remoteEP);
                        mesajlar_list.Items.Add(message);
                        mesaj_text.Clear();

                        // Listbox'ı aşağıya kaydıralım.
                        mesajlar_list.TopIndex = mesajlar_list.Items.Count - 1;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Hata: " + ex.Message);
                }
            }
            else
            {
                MessageBox.Show("Bağlantı yok!");
            }
        }


        private void ListenForMessages()
        {
            try
            {
                while (isConnected)
                {
                    IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
                    byte[] data = udpClient.Receive(ref remoteEP);
                    string message = Encoding.UTF8.GetString(data);

                    if (message.Contains("(Dosya gönderme)"))
                    {
                        // Gelen mesaj bir dosya gönderme mesajı ise, dosyayı alın.
                        byte[] fileData = udpClient.Receive(ref remoteEP);

                        // Dosya adını mesajdan alın
                        string fileName = message.Substring(message.IndexOf(":") + 2);

                        // Mesajdan "(Dosya gönderme)" kısmını kaldırın
                        message = message.Replace("(Dosya gönderme)", "").Trim();


                        if (checkBox1.Checked == true)
                        {
                            // Bildirim baloncukta gösterilecek metni ve başlığı ayarlayın.
                            notifyIcon.BalloonTipTitle = "Yeni Dosya!";
                            notifyIcon.BalloonTipText = message;
                            notifyIcon.ShowBalloonTip(3000); // 3 saniye boyunca göster
                        }

                        else
                        {

                        }

                        // Listbox'ı aşağıya kaydıralım.
                        mesajlar_list.TopIndex = mesajlar_list.Items.Count - 1;

                        // Dosyayı kaydedin
                        this.Invoke(new MethodInvoker(() =>
                        {
                            SaveFileDialog saveFileDialog = new SaveFileDialog();
                            saveFileDialog.FileName = fileName;

                            if (saveFileDialog.ShowDialog() == DialogResult.OK)
                            {
                                System.IO.File.WriteAllBytes(saveFileDialog.FileName, fileData);
                            }

                            mesajlar_list.Items.Add(message + " - Alındı");
                        }));
                    }
                    else
                    {
                        // Diğer durumlarda normal mesajı alın.
                        this.Invoke(new MethodInvoker(() =>
                        {
                            mesajlar_list.Items.Add(message);

                            if (checkBox1.Checked)
                            {
                                // Bildirim baloncukta gösterilecek metni ve başlığı ayarlayın.
                                notifyIcon.BalloonTipTitle = "Yeni Mesaj!";
                                notifyIcon.BalloonTipText = message;
                                notifyIcon.ShowBalloonTip(3000); // 3 saniye boyunca göster
                            }

                            // Listbox'ı aşağıya kaydıralım.
                            mesajlar_list.TopIndex = mesajlar_list.Items.Count - 1;
                        }));
                    }
                }
            }
            catch (SocketException)
            {
                // Soket kapatıldı, dinleme sona erdi.
            }
        }



        private async void FindIPAddressesAsync()
        {
            Ping P = new Ping();

            int a = 100;
            int b = 255;

            int online = 0;
            online_label.Text = "Online: " + online.ToString();

            string ip_ilgisi = ip_bilgisi.Text.Substring(0, ip_bilgisi.Text.LastIndexOf('.'));

            // Listeyi temizleyin, böylece her tetiklendiğinde önceki IP adreslerini kaldırmış olursunuz.
            cihazlar_list.Items.Clear();

            for (int i = a; i <= b; i++)
            {
                string sonuc = ip_ilgisi + "." + i.ToString();
                IPAddress my = IPAddress.Parse(sonuc);

                try
                {
                    PingReply cevap = await P.SendPingAsync(my);

                    if (cevap.Status == IPStatus.Success)
                    {
                        cihazlar_list.Items.Add(sonuc);
                        online++;
                        online_label.Text = "Online: " + online.ToString();
                    }
                    else
                    {
                        cihazlar_list.Items.Add("-------");
                        online_label.Text = "Online: " + online.ToString();
                    }
                }
                catch (Exception ex)
                {
                    cihazlar_list.Items.Add("Hata: " + ex.Message);
                }
            }
        }

        private void yenile_button_Click(object sender, EventArgs e)
        {
            FindIPAddressesAsync();
        }



        private void dosya_gonder_buton_Click(object sender, EventArgs e)
        {
            if (isConnected)
            {
                try
                {
                    OpenFileDialog openFileDialog = new OpenFileDialog();
                    if (openFileDialog.ShowDialog() == DialogResult.OK)
                    {
                        string filePath = openFileDialog.FileName;
                        byte[] fileData = System.IO.File.ReadAllBytes(filePath);

                        // Dosyanın adını alarak gönderme işlemini yapın.
                        string fileName = System.IO.Path.GetFileName(filePath);
                        string message = $"{myName}: (Dosya gönderme) {fileName}";
                        byte[] messageData = Encoding.UTF8.GetBytes(message);

                        string ipAddress = ip_text.Text;
                        int port = Convert.ToInt32(port_text.Text);
                        IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(ipAddress), port);

                        // Önce mesajı gönderin
                        udpClient.Send(messageData, messageData.Length, remoteEP);

                        // Ardından dosyayı gönderin
                        udpClient.Send(fileData, fileData.Length, remoteEP);

                        mesajlar_list.Items.Add(message);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Hata: " + ex.Message);
                }
            }
            else
            {
                MessageBox.Show("Bağlantı yok!");
            }
        }



        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = true; // Form kapatmayı iptal eder
            this.Hide(); // Formu gizler
        }

        private void isim_text_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
           
        }

        private void isim_text_TextChanged(object sender, EventArgs e)
        {
            karakter_sayisi_label.Visible = true;

            // İsim_text TextBox'ındaki metni alın ve toplam karakter sayısını hesaplayın.
            string text = isim_text.Text;
            int characterCount = text.Length;

            if (characterCount > 20)
            {
                // Eğer 20 karakterden fazlaysa, fazla karakterleri silerek 20 karaktere düşürün.
                isim_text.Text = text.Substring(0, 20);
                karakter_sayisi_label.Text = "20/20";
            }
            else
            {
                // Toplam karakter sayısını bir Label'a yazdırın.
                karakter_sayisi_label.Text = characterCount + "/20";
            }
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
            {
                checkBox1.Text = "Bildirimler Açık!";
            }

            else
            {
                checkBox1.Text = "Bildirimler Kapalı!";
            }
        }
    }
}

Connection var, broadcast ve UDP protokolü kullanıyor.
 
Şimdi, şöyle yapabilirsin:

Ya bir sunucu yaparsın IP adresi sabit olur, tek görevi açık clientlerin listesini almak ve biri sorduğunda söylemek olur.

Ya da şöyle de yapabilirsin:

Client'in tarayacağı IP aralığı sabit olur, örneğin yerel ağ için 192.168.1.1'den 254'e kadar tarar. Taraması için programa sabit bir port verirsin, atıyorum 666 portu, 666 portuna whatareyou dendiğinde iamchatapp-ver2 falan döndüğünde anlarsın ki o IP'deki portu dinleyen program senin program ve IP'yi yazdırırsın.

Daha da farklı bir yolu varsa da ben bilmiyorum.

projemin kodları aşağıda bunun üzeirnden analatır mısın?


C#:
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.Drawing;
using System.Collections.Concurrent;
using System.Linq;
using System.Threading.Tasks;

namespace ChatApp
{


    public partial class Form1 : Form
    {
        private UdpClient udpClient;
        private Thread listenThread;
        private bool isConnected = false;
        private string myName;
        private List<string> connectedIPs;
        private NotifyIcon notifyIcon;

        public Form1()
        {
            InitializeComponent();
            InitializeNotifyIcon();
            connectedIPs = new List<string>();
            this.AcceptButton = mesaj_gonder_button; // Klavyede Enter tuşuna basılınca button1'e basılma işlemini gerçekleştirir.
        }

        private void InitializeNotifyIcon()
        {
            notifyIcon = new NotifyIcon();
            notifyIcon.Icon = SystemIcons.Information;
            notifyIcon.Text = "ChatApp";
            notifyIcon.Visible = true;
            notifyIcon.BalloonTipClicked += NotifyIcon_BalloonTipClicked;

            // Bildirime tıklandığında açılacak olan formu belirleyin
            notifyIcon.DoubleClick += NotifyIcon_Double_Click;
        }

        private void NotifyIcon_Double_Click(object sender, EventArgs e)
        {
            // NotifyIcon'a tıklandığında Form'u tekrar açarız.
            this.Show();
        }

        private void NotifyIcon_BalloonTipClicked(object sender, EventArgs e)
        {
            // Baloncuk bildirime tıklandığında yapılacak işlemleri burada belirtebilirsiniz.
            // Bu örnekte herhangi bir işlem yapmıyoruz.
            this.Show();
        }

        private void Form1_Load_1(object sender, EventArgs e)
        {
            checkBox1.Checked = true;

            string bilgisayarAdi = Dns.GetHostName();
            bilgisayar_label.Text = "Bilgisayar Adı: " + bilgisayarAdi;


            // Wi-Fi bağlantısı olan bir ağ arıyoruz.
            NetworkInterface wifiInterface = null;
            foreach (NetworkInterface networkInterface in NetworkInterface.GetAllNetworkInterfaces())
            {
                if (networkInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 &&
                    networkInterface.OperationalStatus == OperationalStatus.Up)
                {
                    wifiInterface = networkInterface;
                    break;
                }
            }

            if (wifiInterface != null)
            {
                // Wi-Fi arabirimine atanan IPv4 adresini alıyoruz.
                foreach (UnicastIPAddressInformation ip in wifiInterface.GetIPProperties().UnicastAddresses)
                {
                    if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
                    {
                        ip_bilgisi.Text = ip.Address.ToString();
                        ip_label.Text = "Wi-Fi IPv4 Adresi: " + ip.Address.ToString();
                        FindIPAddressesAsync();
                        return;
                    }
                }
            }

            // Eğer Wi-Fi bağlantısı yoksa veya IPv4 adresi alınamazsa hata mesajı gösteriyoruz.
            ip_label.Text = "Wi-Fi IPv4 Adresi Bulunamadı.";


        }

        static string kullaniciAdi;
        static int port;

        private void baglan_button_Click(object sender, EventArgs e)
        {
            if (!isConnected)
            {
                try
                {
                    kullaniciAdi = isim_text.Text.Trim(); // Başlangıç ve bitiş boşlukları kaldır

                    if (string.IsNullOrEmpty(kullaniciAdi))
                    {
                        MessageBox.Show("Lütfen İsim Giriniz!");
                        return;
                    }
                    else
                    {
                        // İsim başındaki ve sonundaki boşlukları sil
                        kullaniciAdi = kullaniciAdi.Trim();

                        port = Convert.ToInt32(port_text.Text);
                        udpClient = new UdpClient(port);
                        isConnected = true;
                        myName = kullaniciAdi; // Değişiklik burada yapıldı
                        baglan_button.Text = "Bağlantıyı Kes";

                        listenThread = new Thread(new ThreadStart(ListenForMessages));
                        listenThread.IsBackground = true;
                        listenThread.Start();

                        // KATILMA MESAJI
                        string message = $"{myName} Sohbete Katıldı!";
                        byte[] data = Encoding.UTF8.GetBytes(message);

                        // Diğer cihazın IP adresi ve port numarasını alarak gönderme işlemi yapın.
                        string ipAddress = ip_text.Text;
                        IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(ipAddress), port);

                        udpClient.Send(data, data.Length, remoteEP);
                        mesajlar_list.Items.Add(message);
                        mesaj_text.Clear();
                        // KATILMA MESAJI SONU

                        // Listbox'ı aşağıya kaydıralım.
                        mesajlar_list.TopIndex = mesajlar_list.Items.Count - 1;

                        ip_text.Enabled = false;
                        port_text.Enabled = false;
                        isim_text.Enabled = false;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Hata: " + ex.Message);
                }
            }

            else
            {
                isConnected = true;
                myName = kullaniciAdi; // Değişiklik burada yapıldı

                // AYRILMA MESAJI
                string message = $"{myName} Sohbetten Ayrıldı!";
                byte[] data = Encoding.UTF8.GetBytes(message);

                // Diğer cihazın IP adresi ve port numarasını alarak gönderme işlemi yapın.
                string ipAddress = ip_text.Text;
                IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(ipAddress), port);

                udpClient.Send(data, data.Length, remoteEP);
                mesajlar_list.Items.Add(message);
                mesaj_text.Clear();
                // AYRILMA MESAJI SONU

                // Listbox'ı aşağıya kaydıralım.
                mesajlar_list.TopIndex = mesajlar_list.Items.Count - 1;

                isConnected = false;
                udpClient.Close();
                baglan_button.Text = "Bağlan";

                ip_text.Enabled = true;
                port_text.Enabled = true;
                isim_text.Enabled = true;
            }
        }

        private void gonder_button_Click(object sender, EventArgs e)
        {
            if (isConnected)
            {
                try
                {
                    // Eğer mesaj textbox boş değilse mesajı gönder
                    if (!string.IsNullOrWhiteSpace(mesaj_text.Text))
                    {
                        string message = $"{myName}: {mesaj_text.Text}";
                        byte[] data = Encoding.UTF8.GetBytes(message);

                        // Diğer cihazın IP adresi ve port numarasını alarak gönderme işlemi yapın.
                        string ipAddress = ip_text.Text;
                        int port = Convert.ToInt32(port_text.Text);
                        IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(ipAddress), port);

                        udpClient.Send(data, data.Length, remoteEP);
                        mesajlar_list.Items.Add(message);
                        mesaj_text.Clear();

                        // Listbox'ı aşağıya kaydıralım.
                        mesajlar_list.TopIndex = mesajlar_list.Items.Count - 1;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Hata: " + ex.Message);
                }
            }
            else
            {
                MessageBox.Show("Bağlantı yok!");
            }
        }


        private void ListenForMessages()
        {
            try
            {
                while (isConnected)
                {
                    IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
                    byte[] data = udpClient.Receive(ref remoteEP);
                    string message = Encoding.UTF8.GetString(data);

                    if (message.Contains("(Dosya gönderme)"))
                    {
                        // Gelen mesaj bir dosya gönderme mesajı ise, dosyayı alın.
                        byte[] fileData = udpClient.Receive(ref remoteEP);

                        // Dosya adını mesajdan alın
                        string fileName = message.Substring(message.IndexOf(":") + 2);

                        // Mesajdan "(Dosya gönderme)" kısmını kaldırın
                        message = message.Replace("(Dosya gönderme)", "").Trim();


                        if (checkBox1.Checked == true)
                        {
                            // Bildirim baloncukta gösterilecek metni ve başlığı ayarlayın.
                            notifyIcon.BalloonTipTitle = "Yeni Dosya!";
                            notifyIcon.BalloonTipText = message;
                            notifyIcon.ShowBalloonTip(3000); // 3 saniye boyunca göster
                        }

                        else
                        {

                        }

                        // Listbox'ı aşağıya kaydıralım.
                        mesajlar_list.TopIndex = mesajlar_list.Items.Count - 1;

                        // Dosyayı kaydedin
                        this.Invoke(new MethodInvoker(() =>
                        {
                            SaveFileDialog saveFileDialog = new SaveFileDialog();
                            saveFileDialog.FileName = fileName;

                            if (saveFileDialog.ShowDialog() == DialogResult.OK)
                            {
                                System.IO.File.WriteAllBytes(saveFileDialog.FileName, fileData);
                            }

                            mesajlar_list.Items.Add(message + " - Alındı");
                        }));
                    }
                    else
                    {
                        // Diğer durumlarda normal mesajı alın.
                        this.Invoke(new MethodInvoker(() =>
                        {
                            mesajlar_list.Items.Add(message);

                            if (checkBox1.Checked)
                            {
                                // Bildirim baloncukta gösterilecek metni ve başlığı ayarlayın.
                                notifyIcon.BalloonTipTitle = "Yeni Mesaj!";
                                notifyIcon.BalloonTipText = message;
                                notifyIcon.ShowBalloonTip(3000); // 3 saniye boyunca göster
                            }

                            // Listbox'ı aşağıya kaydıralım.
                            mesajlar_list.TopIndex = mesajlar_list.Items.Count - 1;
                        }));
                    }
                }
            }
            catch (SocketException)
            {
                // Soket kapatıldı, dinleme sona erdi.
            }
        }



        private async void FindIPAddressesAsync()
        {
            Ping P = new Ping();

            int a = 100;
            int b = 255;

            int online = 0;
            online_label.Text = "Online: " + online.ToString();

            string ip_ilgisi = ip_bilgisi.Text.Substring(0, ip_bilgisi.Text.LastIndexOf('.'));

            // Listeyi temizleyin, böylece her tetiklendiğinde önceki IP adreslerini kaldırmış olursunuz.
            cihazlar_list.Items.Clear();

            for (int i = a; i <= b; i++)
            {
                string sonuc = ip_ilgisi + "." + i.ToString();
                IPAddress my = IPAddress.Parse(sonuc);

                try
                {
                    PingReply cevap = await P.SendPingAsync(my);

                    if (cevap.Status == IPStatus.Success)
                    {
                        cihazlar_list.Items.Add(sonuc);
                        online++;
                        online_label.Text = "Online: " + online.ToString();
                    }
                    else
                    {
                        cihazlar_list.Items.Add("-------");
                        online_label.Text = "Online: " + online.ToString();
                    }
                }
                catch (Exception ex)
                {
                    cihazlar_list.Items.Add("Hata: " + ex.Message);
                }
            }
        }

        private void yenile_button_Click(object sender, EventArgs e)
        {
            FindIPAddressesAsync();
        }



        private void dosya_gonder_buton_Click(object sender, EventArgs e)
        {
            if (isConnected)
            {
                try
                {
                    OpenFileDialog openFileDialog = new OpenFileDialog();
                    if (openFileDialog.ShowDialog() == DialogResult.OK)
                    {
                        string filePath = openFileDialog.FileName;
                        byte[] fileData = System.IO.File.ReadAllBytes(filePath);

                        // Dosyanın adını alarak gönderme işlemini yapın.
                        string fileName = System.IO.Path.GetFileName(filePath);
                        string message = $"{myName}: (Dosya gönderme) {fileName}";
                        byte[] messageData = Encoding.UTF8.GetBytes(message);

                        string ipAddress = ip_text.Text;
                        int port = Convert.ToInt32(port_text.Text);
                        IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(ipAddress), port);

                        // Önce mesajı gönderin
                        udpClient.Send(messageData, messageData.Length, remoteEP);

                        // Ardından dosyayı gönderin
                        udpClient.Send(fileData, fileData.Length, remoteEP);

                        mesajlar_list.Items.Add(message);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Hata: " + ex.Message);
                }
            }
            else
            {
                MessageBox.Show("Bağlantı yok!");
            }
        }



        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = true; // Form kapatmayı iptal eder
            this.Hide(); // Formu gizler
        }

        private void isim_text_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
          
        }

        private void isim_text_TextChanged(object sender, EventArgs e)
        {
            karakter_sayisi_label.Visible = true;

            // İsim_text TextBox'ındaki metni alın ve toplam karakter sayısını hesaplayın.
            string text = isim_text.Text;
            int characterCount = text.Length;

            if (characterCount > 20)
            {
                // Eğer 20 karakterden fazlaysa, fazla karakterleri silerek 20 karaktere düşürün.
                isim_text.Text = text.Substring(0, 20);
                karakter_sayisi_label.Text = "20/20";
            }
            else
            {
                // Toplam karakter sayısını bir Label'a yazdırın.
                karakter_sayisi_label.Text = characterCount + "/20";
            }
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
            {
                checkBox1.Text = "Bildirimler Açık!";
            }

            else
            {
                checkBox1.Text = "Bildirimler Kapalı!";
            }
        }
    }
}

Connection var, broadcast ve UDP protokolü kullanıyor.
Kod ChatGPT kokuyor.

UDP protokolü kullanıyor.
Mesajlaşma uygulamasında neden UDP?
 
Şimdi, şöyle yapabilirsin:

Ya bir sunucu yaparsın IP adresi sabit olur, tek görevi açık Client'lerin listesini almak ve biri sorduğunda söylemek olur.

Ya da şöyle de yapabilirsin:

Client'in tarayacağı IP aralığı sabit olur, örneğin yerel ağ için 192.168.1.1'den 254'e kadar tarar. Taraması için programa sabit bir port verirsin, atıyorum 666 portu, 666 portuna whatareyou dendiğinde iamchatapp-ver2 falan döndüğünde anlarsın ki o IP'deki portu dinleyen program senin program ve IP'yi yazdırırsın.

Daha da farklı bir yolu varsa da ben bilmiyorum.

Kod ChatGPT kokuyor.

Mesajlaşma uygulamasında neden UDP?

Bilmiyorum ilk internet etkileşimli projem fazla araştrımadan bir şeyler denedim ve sunucusuz çalışsın istedim o yüzden UDP oldu.

Kim takıldığı yerlerde ChatGPT'ye sormuyor ki, zaten ondan tek istediğim bu konunun sebebiyidi onu da beceremedi.
 
Client'in tarayacağı IP aralığı sabit olur, örneğin yerel ağ için 192.168.1.1'den 254'e kadar tarar. Taraması için programa sabit bir port verirsin, atıyorum 666 portu, 666 portuna whatareyou dendiğinde iamchatapp-ver2 falan döndüğünde anlarsın ki o IP'deki portu dinleyen program senin program ve IP'yi yazdırırsın.
Bunu da sor, yapsın o halde. Ya da GPT'siz kendi kodunu yaz.

Emeğin sana ait olmadıkça yaptığına elimi sürmem. Kusura bakma.
 
Bunu da sor, yapsın o halde. Ya da GPT'siz kendi kodunu yaz.

Emeğin sana ait olmadıkça yaptığına elimi sürmem. Kusura bakma.

Her şeyi ona yaptırmıyorum yazılımda yeniyim ve yeni şeyler öğrenmek ve yapmak için ondan yardım alıyorum mesela kodumda gördüğün gibi baştaki ve sondaki boşlukları kaldırmayı ve veri gönderip veri almayı ondan öğrendim, amacım herhangi bir şekilde emek sarfetmeden bir şey yaparak bunu ben ürettim demek değil amacım öğrenerek kendime yeni şeyler katmak.
 

Technopat Haberler

Yeni konular

Geri
Yukarı