PDA

View Full Version : ارسال فايل با سوكت پروگرمينگ



Somayeh_Zamani
سه شنبه 08 بهمن 1387, 11:48 صبح
سلام،
مي‌خواهم با استفاده از سوكت پروگرمينگ، برنامه‌اي بنويسم كه دو كلاينت كه به هم شبكه هستند و در حال چت هستند، به يكديگر فايل بفرستند، لطفا راهنمايي بفرماييد.
(با قسمت چت، مشكلي ندارم. فقط مي‌خوام انتقال فايل را بدانم)

ممنون

manitack
سه شنبه 08 بهمن 1387, 13:23 عصر
سلام
بايد با يكي از روشهاي موجود فايل رو سريالايز كني مثل فرمت باينري.بعد ارسال كني.
براي جزئيات سرچ كني مطلب زياده.

Somayeh_Zamani
سه شنبه 08 بهمن 1387, 13:26 عصر
سلام
بايد با يكي از روشهاي موجود فايل رو سريالايز كني مثل فرمت باينري.بعد ارسال كني.
براي جزئيات سرچ كني مطلب زياده.


يه دقيقه صبر كنيد!!!
يعني اف تي پي كشكه؟

manitack
سه شنبه 08 بهمن 1387, 14:15 عصر
http://www.csharphelp.com/archives/archive9.html

farzin.fz
سه شنبه 08 بهمن 1387, 18:35 عصر
برای قسمت چت می توان از UDP استفاده نمود ولی برای ارسال فایل می بایست از TCP استفاده نمود مگراینکه خودمان بخواهیم با UDP مکانیزم TCP را شبیه سازی کنیم .
برای مثال فایلی به نام Text.txt را که در درایو C ایجاد کرده ایم برای انتقال در نظر می گیریم که ابتدا باید اسمبلی های زیر را درصورت لزوم اضافه و اعلان کنیم :


;using System.Net.Sockets


using System.IO;


//Client Code Part//

FileStream fs =File.Open("C:\\text.txt",FileMode.Open); //To open file

byte[] f_buffer = new byte[fs.Length];//Creating a buffer

fs.Read(f_buffer, 0, (int)fs.Length);//Filling the buffer

TcpClient cs = new TcpClient("Localhost", 12120);//127.0.0.1

NetworkStream networkStream = cs.GetStream();//Netstream

networkStream.Write(f_buffer, 0, f_buffer.GetLength(0));//Transfer

networkStream.Close();//Closing stream


باید دقت شود که اگر کد بالا بدون کد SERVER اجرا شود Exception ایجاد می کند چون ارتباط TCP است حتما اول باید SERVER وجود داشته باشد که کد آن در زیر است :

;using System.Net.Sockets


//Server Code Part//


TcpListener tcpListener;//declare
TcpClient tc;//declare



tcpListener= new TcpListener(12120);//initialize

while (true)//Endless loop
}
tc = tcpListener.AcceptTcpClient();//accept connection
if (tc.Connected) //checking for connection

accept();//calling the accept function

{
void accept()//function
}
int bs = 1024;//declare

Byte[] dataByte = new Byte[bs];//buffer
NetworkStream ns = tc.GetStream();//getting netstream
ns.Read(dataByte, 0, bs);//write to buffer

FileStream fs; //declare

fs=new FileStream("C:\\new_file.txt",FileMode.Create);//downloaded file

fs.Write(dataByte, 0, dataByte.Length);//Write to file
fs.Flush();//Flush to file
fs.Close();//Close stream

{

به این ترتیب یک ترنسفر ساده صورت می گیرد و در مورد کد بالا باید در نظر داشت که فقط 1024 بایت جابجا گشته و کد Server مذکور حتی المقدور باید به صورت Multithread اجرا گردد وگرنه شما UserInterfaceنخواهید داشت .

Somayeh_Zamani
چهارشنبه 09 بهمن 1387, 09:34 صبح
سلام،
ببين شما مي توني كد سرورتو به اين كد سرور اضافه كني؟



اين كد رو يكي از دوستان تو سايت گذاشته ولي خودشم نمي تونه، انتقال فايل رو اضافه كنه!!!

farzin.fz
چهارشنبه 09 بهمن 1387, 17:31 عصر
منطق به کار رفته در کد بالا خیلی ساده است با این حال اگر نیاز دارید کد خودتان را به صورت Flat Text در اینجا کپی کنید تا تغییرات لازم را در صورت لزوم اعمال کنم .

Somayeh_Zamani
چهارشنبه 09 بهمن 1387, 18:12 عصر
سلام،
ساده بودن كه مي دونم خيلي ساده است. ولي انتقال فايل رو نمي دونم چه طوري ميشه. آخه اين يه چت رومه و سرور داره متن‌ها رو واسه همه مي‌فرسته. نمي دونم از كجا بفهمه كه چيزي كه الان اومده يك متنه يا فايل؟:افسرده:

farzin.fz
چهارشنبه 09 بهمن 1387, 19:22 عصر
شما می توانید متن را روی یک پورت و فایل را روی پورت دیگری بفرستید .

mostafa-66
دوشنبه 27 بهمن 1393, 10:24 صبح
با سلام دوستان کسی ارسال فایل با متد soket.sendfile و طریقه دریافت آن را میدونه اگر راهنمایی بفرمایید ممنون میشم