فایده نداشت . کارم راه نسافتاد بازم همونطوره
الان با اندازه فایل مشکل ندارم . فقط با اسم فایل مشکل دارم .
از کلاینت اینو میفرستم :
OpenFileDialog o = new OpenFileDialog();
o.ShowDialog();
byte[] fileBytes ;
fileBytes = File.ReadAllBytes(o.FileName) ;
string h = fileBytes.Length.ToString();
byte[] gg = Encoding.UTF8.GetBytes(h + "~" + o.SafeFileName);
sock.Send(gg, SocketFlags.None);
Thread.Sleep(100);
sock.Send(fileBytes, SocketFlags.None);
بعد توی سرور اینطوری کار میکنم :
این یه تابع رو نوشتم :
public void recive(int size, string FileName)
{
int counter_file;
byte[] buff_file = new byte[size];
try
{
connection.Receive(buff_file, SocketFlags.None);
File.WriteAllBytes(FileName, buff_file);
for (counter_file = 0; counter_file < buff_file.Length; counter_file++)
buff_file[counter_file] = Convert.ToByte(false);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Thread.Sleep(1000);
}
بعدش این تایع روی گداشتم اوی یه Thread :
public void WaitForConnect()
{
if (!conected)
{
TcpListener server = new TcpListener(ipAddress, port);
Status = "Listening for Connections on " + hostName + "...\n";
server.Start();
connection = server.AcceptSocket();
Status = "Client are now connected to the server";
conected = true;
}
int counter;
byte[] buff = new byte[100];
while (true)
{
try
{
if (recive_file == false)
{
recive_file = true;
connection.Receive(buff, SocketFlags.None);
txt_beforeSplit = Encoding.UTF8.GetString(buff);
Arr_After_Split = txt_beforeSplit.Split('~');
size = int.Parse(Arr_After_Split[0]);
name = Arr_After_Split[1];
for (counter = 0; counter < buff.Length; counter++)
buff[counter] = Convert.ToByte(false);
}
else
{
recive(size, full_path+name);
recive_file = false;
for (counter = 0; counter < buff.Length; counter++)
buff[counter] = Convert.ToByte(false);
}
catch (Exception ex) { }
Thread.Sleep(1000);
}
}
اما ارور میده میگه مسیرت مشکل داره و دارای کارکتریه که نباید باشه . حالا اگه توی این recive(size, full_path+name);
خط بنویسم : بجاش بنویسم : recive(size, @"D:\a.pdf");
درست میشه اما مساله اینجاس اونوقت دیگه نمیتونم اسم فایل و جتی پسوند فایل رو بفهمم که با همون پسوند و نام ذخیرش کنم . از FolderBrowser و ... هم استفاده کردم واسه ذخیره مسیر اما نشد !! به این صورت : private void button1_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
full_path = folderBrowserDialog1.SelectedPath ;
label3.Text = full_path;
}
else
{
full_path = @"D:\";
label3.Text = full_path ;
}
}
اما باز هم ...
ممنون میشم راهنماییم کنید