PDA

View Full Version : ارسال و دریافت فایل + Socket



saman_h
دوشنبه 26 تیر 1391, 15:18 عصر
سلام دوستان
میخوام از طریق Socket و با پروتوکل TCP/IP فایل ارسال کنم اما مشکل دارم . چنتا تابع هم دارم اما همش ارور میده . ممنون میشم اگه کسی بتونه منو راهنمایی کنه
در ضمن من سرچ زدم توی تالار ، چیزای زیادی هس اما سر در نمیارم . یکیشم که سر در میارم اینه :
http://barnamenevis.org/showthread.php?344881-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D9%81%D8%A7%DB%8C%D9%84-%D8%A8%D9%87-%D8%A8%D8%A7%DB%8C%D8%AA-%D9%88-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D8%A8%D9%87-%DA%A9%D9%84%D8%A7%DB%8C%D9%86%D8%AA-%D8%AF%D8%B1-%D8%B3%D9%88%DA%A9%D8%AA&highlight=%D8%A7%D8%B1%D8%B3%D8%A7%D9%84+%D9%81%D8 %A7%DB%8C%D9%84+%D8%A8%D8%A7+%D8%B3%D9%88%DA%A9%D8 %AA
اما متاسفانه نمیدونم من دارم اشتباه ازش استفاده میکنم یا اینکه مشکل داره .
اگه نمونه کدی یا پیشنهادی دارید ممنون میشم
با تشکر

saman_h
دوشنبه 26 تیر 1391, 20:12 عصر
این هم یک نمونه از اون کلاسی که گفتم . مشکلم اینه نمیتونم با Thread اونو اجرا کنم !! البته نبایدم بشه چون کلاسه !! واسه همین رفتم از توابعی که بالا لینکشو گذاشتم استفاده کردم که ...
اینم کلاس :
class FTClientCode
{
public static string curMsg = "";
public static void SendFile(string fileName)
{
try
{
// IPAddress[] ipAddress = Dns.GetHostAddresses("localhost");
IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 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 = "File size is more than 850kb, please try with small file.";
MessageBox.Show(curMsg);
return;
}

//curMsg = "Buffering ...";
byte[] fileData = File.ReadAllBytes(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);
fileData.CopyTo(clientData, 4 + fileNameByte.Length);

//curMsg = "Connection to server ...";
clientSock.Connect(ipEnd);

//curMsg = "File sending...";
clientSock.Send(clientData);

//curMsg = "Disconnecting...";
clientSock.Close();
curMsg = "File transferred.";
MessageBox.Show(curMsg);

}
catch (Exception ex)
{
if (ex.Message == "No connection could be made because the target machine actively refused it")
{
curMsg = "File Sending fail. Because server not running.";
MessageBox.Show(curMsg);
}
else
{
curMsg = "File Sending fail." + ex.Message;
MessageBox.Show(curMsg);
}
}

}
}

arminkhodaei
دوشنبه 09 مرداد 1391, 21:07 عصر
من عاشق همین گیر کردن سر یه چیزایه به نظر غیر منطقی هستم. بعد که مشکل حل میشه تا آخر عمر نکتش را فراموش نمیکنی :چشمک:

ali_habibi1384
دوشنبه 09 مرداد 1391, 22:46 عصر
ارسال فايل توسط سوكت (http://www.codeproject.com/Articles/24017/File-Transfer-using-Socket-Application-in-C-NET-2)
ارسال و دريافت فايل توسط سوكت (http://stackoverflow.com/questions/3353984/sending-and-receiving-files-socket-programming-c-sharp)