duyuruElektroArge.com'a Hoşgeldiniz. Üye Olmak İçin Tıklayın. duyuru





houseForum ana sayfa   iletişimİletişim   bilgiSSS  
kırmızı yeşil mavi
ekleKayıt  anahtarGiriş
evForum ana sayfa goKod Paylaşımı & Tamamlanmış Projeler goC# Dili Kod Paylaşımı ve Projeler
 

  • Reklam

Socket ile Chat Uygulaması (Client-Server)

C# Dili ile Yazılmış Kodlar ve Tamamlanmış Projeler

Socket ile Chat Uygulaması (Client-Server)

Mesajgönderen okanbilke » 28 Nis 2013 09:20

Socketler, bir tür süreçler arası haberleşme(interprocessing) yöntemidir.Aklınıza gelebilecek hemen her internet programı socket program olarak çalışır. Örneğin ftp programları 21 numaralı port üzerinde çalışan socket programlarıdır veya Chat programları.Socket programlama cok karısık ve bir o kadarda uzun konudur.Biz burda Client ve Server olarak iki sürec arasindaki bir Chat Programının nasıl yapıldığını kısaca görelim.

Yaptığım örneğin görünüşü
Resim


Client Kodları:
Kod: Tümünü seç
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace client
{
    public partial class Form1 : Form
    {
        //Yine gerekli Siniflarin nesneleri tanimlaniyor
        Thread t;
        TcpClient baglantikur;
        NetworkStream ag;
        StreamReader oku;
        StreamWriter yaz;
        public delegate void ricdegis(string text);
        public Form1()
        {
            InitializeComponent();
        }

        // Clintde Method_1 (Gelen veri okunuyor)
        public void okumayabasla()
        {
            ag = baglantikur.GetStream();
            oku = new StreamReader(ag);
            while (true)
            {
                try
                {
                    string yazi = oku.ReadLine();
                    ekranabas(yazi);
                }
                catch
                {
                    return;
                }
            }
        }

        // Clientde Method_2 (Okunan Veri richTextBox icine yaziliyor)
        public void ekranabas(string s)
        {
            if (this.InvokeRequired)
            {
                ricdegis degis = new ricdegis(ekranabas);
                this.Invoke(degis, s);
            }
            else
            {
                s = "" + s;
                richTextBox1.AppendText(s + "\n");
            }
        }

        // Clientde Method_3 (Istenilen IP'ye istenen Port üzerinden baglaniliyor)
        public void baglanti_kur()
        {
           
                //Ben Lochalhos üzerinde deneme yapacagim icin 127.0.0.1 verdim
                baglantikur = new TcpClient("127.0.0.1", Convert.ToInt16(textBox1.Text));
                t = new Thread(new ThreadStart(okumayabasla));
                t.Start();
                richTextBox1.AppendText(DateTime.Now.ToString() + " Baglanti kuruldu...\n");
        }

       
        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button3_Click_1(object sender, EventArgs e)
        {
            baglantikur.Client.Close();
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            baglanti_kur();
        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            if (textBox2.Text == "")
                //Burda bos alan göndermeyi önlüyoruz...
                return;
            else
            {
                yaz = new StreamWriter(ag);
                yaz.WriteLine(textBox2.Text);
                yaz.Flush();
                richTextBox1.AppendText(textBox2.Text + "\n");
                textBox2.Text = "";
            }
        }

    }
}


Server Kodları:
Kod: Tümünü seç
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace server
{
    public partial class Form1 : Form
    {
        //Gerekli Siniflarin Nesneleri tanimlaniyor
        Thread t;
        IPAddress ipadresimiz;
        TcpListener dinle;
        Socket soket;
        NetworkStream ag;
        StreamReader oku;
        StreamWriter yaz;

        public delegate void ricdegis(string text);

        public void okumayabasla()
        {
            soket = dinle.AcceptSocket();
            ag = new NetworkStream(soket);
            oku = new StreamReader(ag);
            while (true)
            {
                try
                {
                    string yazi = oku.ReadLine();
                    ekranabas(yazi);
                }
                catch
                {
                    return;
                }
            }
        }

        // Serverde Method_2 (Gelen Veriyi richTextBox icine yazdirmak icin)
        public void ekranabas(string s)
        {
            if (this.InvokeRequired)
            {
                ricdegis degis = new ricdegis(ekranabas);
                this.Invoke(degis, s);
            }
            else
            {
                s = "" + s;
                richTextBox1.AppendText(s + "\n");
            }

        }

        // Serverde Method_3 (Serverimizin Port dinlemesine baslamsi icin)
        private void dinlemeye_basla()
        {
           
                ipadresimiz = IPAddress.Parse("127.0.0.1");
                dinle = new TcpListener(ipadresimiz, Convert.ToInt16(textBox1.Text));
                dinle.Start();
                t = new Thread(new ThreadStart(okumayabasla));
                t.Start();
                richTextBox1.AppendText(DateTime.Now.ToString() + " Dinleme baslatildi...\n");
           

           
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            dinlemeye_basla();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (textBox2.Text == "")

                //Burda bos alan göndermeyi önlüyoruz...
                return;
            else
            {
                yaz = new StreamWriter(ag);
                yaz.WriteLine(textBox2.Text);
                yaz.Flush();
                richTextBox1.AppendText(textBox2.Text + "\n");
                textBox2.Text = "";
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            ag.Close();
        }
    }
}


Proje İndirme Linkleri
Mesaj içeriğini görmek için kayıt ve giriş gerektirir



Not: Projeyi çalıştırırken önce serverdan dinlemeyi başlat diyoruz. Daha sonra Clientten bağlan diyoruz ve iletişim sağlanıyor. Ağ üzerinden farklı bilgisayarlarda kullanmak için ip adresini kodlardan değiştirebilirsiniz.
okanbilke@gmail.com
Kullanıcı avatarı
okanbilke
Site Kurucusu
Site Kurucusu
 
Mesajlar: 721
Beğendiklerim: 0 mesaj
Beğenilenlerim: 0 mesaj
Kayıt: 15 Mar 2013 13:09
Konum: Ankara

Reklam

Re: Socket ile Chat Uygulaması (Client-Server)

Mesajgönderen ahmtcnbzkrt » 17 Oca 2014 02:21

Teşekkür ederim herkesin bir uzmanlık dalı olması gerekir.
Socket programlamaya ağırlık vericem bu aralar.
Kullanıcı avatarı
ahmtcnbzkrt
Yeni Üye
Yeni Üye
 
Mesajlar: 1
Beğendiklerim: 0 mesaj
Beğenilenlerim: 0 mesaj
Kayıt: 17 Oca 2014 02:19

Re: Socket ile Chat Uygulaması (Client-Server)

Mesajgönderen FearCry » 25 Haz 2014 02:19

PM gibi değilde 2-3 clienti bi araya toplayıp konferans şeklinde yapabilir miyiz bu olayı? Biraz uğraştım çoklu bağlantıyı halletim hatta bağlanan clientleri listeledim fakat bi araya toplamayı halledemedim. Bu işin mantığı ne nasıl halledebiliriz?

Osman BİÇER
osm.bicer@gmail.com

Resim
Kullanıcı avatarı
FearCry
Çırak
Çırak
 
Mesajlar: 4
Beğendiklerim: 0 mesaj
Beğenilenlerim: 0 mesaj
Kayıt: 11 May 2013 13:24
Konum: Ankara

Re: Socket ile Chat Uygulaması (Client-Server)

Mesajgönderen canonka » 13 Eyl 2018 17:42

Türkçe ve ingilizce kaynaklar dahil gerçekten tam istediğim nokta. Ellerinize sağlık çok işime yaradı. Konu 2013'te açılmış hala bu kadar güzel bir kaynak yok. Yazık valla. Teşekkürler Admin...
Kullanıcı avatarı
canonka
Yeni Üye
Yeni Üye
 
Mesajlar: 1
Beğendiklerim: 0 mesaj
Beğenilenlerim: 0 mesaj
Kayıt: 13 Eyl 2018 16:46


Dön C# Dili Kod Paylaşımı ve Projeler

Kimler çevrimiçi

Bu forumu gezen kullanıcılar: Hiç bir kayıtlı kullanıcı yok ve 1 misafir


  • Reklam
cron