PDA

View Full Version : حرفه ای: socket programing



kalantary273
سه شنبه 18 مهر 1391, 09:31 صبح
سلام من می خوام یک برنامه بنویسم که بدون استفاده از FTP یک فایل رو برای یک کامپیوتر دیگه با پروتکل TCP/IP ارسال کنه از TCP میخوام استفاده کنم و با C# کار می کنم . کسی میتونه یک برنامه نمونه برام بزاره که کمکم کنه

saman_h
سه شنبه 18 مهر 1391, 10:10 صبح
سلام دوست عزیز
شما دوتا پروژه بساز یکی کلاینت یکی سرور . توی سرور یک TCPListener بساز که منتظر برقراری ارتباط باشه
داخل کلاینت هم یه سوکت بساز و از طریق یه پورت و آی پی به اون سرور اتصال رو برقرار کن . حالا با استفاده از دستور File.ReadAllBytes و File.WriteAllByte فایلت رو به بایت تبدیل کن بفرست و توی سرور از بایت بیرونش بیار . درضمن برای ارسال هم از متد send مربوط به شیء سوکت استفاده کن
اینم یه نمونه :
سرور :


TcpListenerserver = new TcpListener(ipAddress,port);


server.Start();


sock = server.AcceptSocket();
[/CSHARP]
بعدش باید متد دریافت رو براش بذاری :

byte[] buff = new byte[100];


sock.Receive(buff, SocketFlags.None);

اینم واسه دریافت فایل ارسال شده :

File.WriteAllBytes(“مسیر فایل + پسوند فایل”);

sock.Receive(buff,SocketFlags.None);



کلاینت :
اول باید سوکت بسازی ( البته توی سرور هم اینو باید بسازیا ) :

public Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

بعد اینجوری به سرور وصل میشی : sock.Connect(IPAddress.Parse(ServerAddress_txt.Tex t), port);
حالا فایل رو تبدیل میکنی بعد میفرستیش :
[CSHARP]

OpenFileDialog o = newOpenFileDialog();


if (o.ShowDialog() == DialogResult.OK)


{


byte[] fileBytes = File.ReadAllBytes(o.FileName);


sock_File.Send(fileBytes, SocketFlags.None);


}

ایشالا که کارت راه بیفته ، اگه سوالی داشتی .اسم پیام بذار . درضمن واسه ارسال فایل از توابع آماده و کلاس های آماده هم میتونی استفاده کنی اما من خودم شخصا دوس داشتم بصورت دستی این کارو انجام بدم که یاد بگیرم و متوجه بشم !!
چیزاییم که نوشتم اگه در این زمینه مطالعه داشته باشی کاملا متوجه میشی چون ریزه کاریم داره من لپ مطلبو واست نوشتم

kalantary273
سه شنبه 25 مهر 1391, 08:37 صبح
saman عزیز از راهنماییت متشکرم

RIG000
سه شنبه 25 مهر 1391, 11:21 صبح
میشه در مورد تک تک کد ها و خط به خط توضیح داده بشه؟

kalantary273
سه شنبه 23 آبان 1391, 13:15 عصر
ببین من از متد sendfile به صورت زیر استفاده کردم ولی توی برنامه کلاینتم نمیتونم اونو ذخیرش کنم البته به کلاینت ارسال میشه چون به صورت متنی که نمایشش میدم نشون میده که فایل دریافت شده ولی نمی تونم ذخیرش کنم کسی می تونه کمکم کنه
client.sendfile(openfiledialoge1.filename