Tweet

FileSender - Tcp

Selam arkadaşlar.. Windows sisteme uzun süre ara vermiştim.Bu süre zarfında linux sistemleri yakından inceleme fırsatım oldu.Özellikle programlama alt yapımı linux mimarisine uydurma çabalarıyla geçti zamanım..C# dilinin esnek yapısıyla soket programlama uygulamalarına farklı olarak tcp üzerinden dosya transferlerinin nasıl gerçekleştirildiğini inceleyeceğiz..[...]

Önceki yazılarımdaki gibi yine server-client taraflı anlatım yapacağım..

Form üzerine 2 buton 3 label timer backgroundWorker ekleyiniz..
Öncelikle server kısmından başlayalım...


CODE:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace Sunucu
{

public partial class Form1 : Form
{

public Form1()
{

IntializeComponent();
Sunucu.receivedPath ="";
}

private void button1_Click(object sender, EventArgs e)
{

if (Sunucu.receivedPath.Length > 0)
backgroundWorker1.RunWorkerAsync ();

else
MessageBox.Show("Lütfen Dosya yolu belirleyin..");

}

private void timer1.Tick(object sender, EventArgs e)
{

Sunucu obj = new Sunucu();
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{

obj.StartServer();
}

private void button2_Click(object sender,EventArgs e)
{

FolderBrowserDialog fd = new FolderBrowserDialog();
if (fd.ShowDialog() == DialogResult.OK)

{

Sunucu.receivedPath= fd.SelectdPath;
}
}

private void label4_Click (object sender, EventArgs e)
{
}

privae void Form1_Load(object sender, EventArgs e)
{

}

}

class Sunucu
{

IPEndPoint ipEnd;
Sockket sock;
public Sunucu()
{

ipEnd = new IPEndPoint(IPAddress.Any, 5656);
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
sock.Bind(ipEnd);

}

public static string receivedPath;
public static string curMsg = "Durdu";
public void StartServer()
{

try
{

curMsg = "Çalışıyor...";
sockListen(100);
curMsg ="Dosya alımı bekleniyor...";
Socket clientSock=sock.Accept();

byte[] clientData = new byt [1024 * 5000];

int receivedBytesLen = clientSock.Receive(clientData);
curMsg="Veri alınıyor...";

int fileNameLen = BitConverter.ToInt32(clientData, 0);
string filename = Encoding.ASCII.GetString(clientData, 4, fileNameLen);

BinaryWriter bWriter = new BinaryWriter(File.Open(receivedPath +""+ fileName, FileMode.Append));;

curMsg =" Dosya Kaydedildi...";

bWrite.Close();
clientSock.Close();
curMsg = "Dosya alımı ve Kaydetme işlemi Tamamlandı.. Sunucu durduruldu.";
}
catch (Exception)
{
curMsg = "Hata..";
}
}
}
}




İstemci tarafında ise sunucu makineye dosya gönderme işlemini yapacağız.Sunucu kendisine gelen veri paketini alıp kaydediyordu..İstemcide sunucuya belirlediği bir veri paketini tcp üzerinden yollayarak istekde bulunacaktır.Sunucu paket isteğini kabul edecek bağlantılı olarak istemci paketi yollama işlemmini tamamlayacaktır..

İstemci tarafına başlamadan önce form üzerine 1 buton 2 label 1 adet timer ekleyiniz..

CODE:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.IO;

namespace Istemci
{

public partial class Form1 : Form
{

public Form1()
{

IntializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

FileDialog fdg = new OpenFileDialog();
if (fDg.ShowDialog () == DialogResult.OK)
{

Istemci.SendFile(fDg.FileName);
}
}

private void timer1_Tick(object sender, EventArgs e)
{

label3.Text = Istemci.curMsg;
}

private void label1_Click(Object sender, EventArgs e)
{

}

private void Form1_Load(object sender, EventArgs e)
{

}

// Dosya gönderme işlemini yapıyoruz...

class Istemci
{

public static string curMsg = "Etkinlik Yok";
public static void SendFile(string FileName)
{

try
{

IPAddress[] ipAddress = Dns.GetHostAddresses("localhost");
IPEndPoint ipEnd = new IPEndPoint (ipAddress[0], 5656);
Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);

string filepath ="";

fileName = fileName.Replace("", "/");
while (fileName.IndexOf("/") > -1)

{

filePath += fileName.Substring(0, fileName.IndexOf("/") +1);
fileName = fileName.Substring(fileName.IndexOf("/") +1);

}

byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName);
if (fileNameByte.Length > 850 * 1024)
{

curMsg ="Dosyanızın Boyutu varsayılandan fazla.Lütfen daha ufak boyutta dosya seçin.";
return;
}

curMsg ="İşleniyor..";
byte[] fileData = FileReadAllBytes(filePath + fileName);
byte[] clientData = new byte [4 + fileNameByte.Length +fileData.Length];
byte[] fileNameLen = BitConverter.GetBytes (fileNameByte.Length);

fileNameLen.CopyTo(clientData,0 );
fileNameByte.CopyTo(clientData,4);

curMsg =" Sunucuya erişim sağlandı...";
clientSock.Connect(ipEnd);

curMsg ="Dosya Gönderiliyor..";
clientSock.Close();
curMsg ="Transfer tamamlandı";

}
catch (Exception ex)
{

if(ex.Message=="Bağlantı sağlanamadı..Hedef makine aktif değil yada bağlantı isteğiniz reddedilmiş olabilir..";

curMsg="Dosya gönderilemedi..Çünkü Sunucu aktif değil";
else

curMsg="Dosya gönderilemedi.." +ex.Message;
}
}
}
}


Sonuç
http://img370.imageshack.us/img370/4521/10917350.jpg
http://img377.imageshack.us/img377/2600/37444559.jpg
http://img377.imageshack.us/img377/1276/91785126.jpg
http://img359.imageshack.us/img359/207/51388106.jpg
http://img354.imageshack.us/img354/2726/43903237.jpg
http://img291.imageshack.us/img291/7079/18161177.jpg
http://img377.imageshack.us/img377/7290/12605157.jpg







Oguzz
oguz@thecoders.net
5 Kasim 2007 17:23

İlgili Olabilecek Makaleler


Yorumlar (0)




Ziyaretçi olarak yorum yazamazsınız. Üye olmak için tıklayın Üye iseniz giriş yapın.



MENÜ » FORUM
Menü » Takip et
RSS Facebook Twitter Friendfeed
Sık Kullanılanlar Google Yahoo Live
Menü » Paylaş
E-Posta ile gönder Twitter Facebook Friendfeed
Buzz Stumbleupon Delicious Digg