Это программа отправки / получения файлов с использованием сокетов TCP. Этот код включен как в клиентское, так и в серверное приложение, и работает нормально только в первый раз.
Во второй раз сторона, которая собирается получить, получает 0, и перевод заканчивается. Как я могу это исправить, чтобы его можно было использовать много раз?
public static void sendFile(string filePath)
{
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
string fileName = Path.GetFileName(filePath);
byte[] fileData;
try
{
//sending file name and file size to the server
busy = true;
fileSize = fs.Length;
byte[] fileDetial = null;
string detail = fileName + "," + fileSize.ToString();
fileDetial = Encoding.ASCII.GetBytes(detail);
client.Send(fileDetial);
//sending file data to the server
fileData = new byte[packetSize];
count = 0;
sum = 0;
Program.thFP.Start(); // running transfer rate
Program.fp.StatusLabel("Sending data...");
transferRate.timeLeft();
while (sum < fileSize)
{
fs.Seek(sum, SeekOrigin.Begin);
fs.Read(fileData, 0, fileData.Length);
count = client.Send(fileData, 0, fileData.Length, SocketFlags.None);
sum += count;
Program.fp.ProgressBarFileHandler(sum, fileSize);
}
}
finally
{
busy = false;
fs.Close();
fileData = null;
MessageBox.Show(string.Format("{0} sent successfully", fileName));
}
}
нет проблем вообще с кодом ниже, как я предполагаю .. я думаю, что проблема в методе SENDFILE .. но вот код receiveFile .. это может помочь
public static void ReceiveFile()
{
//receving file name and file size from server
busy = true;
byte[] commandData = new byte[1024];
client.Receive(commandData);
Console.WriteLine(Encoding.ASCII.GetString(commandData));
string[] Command = Encoding.ASCII.GetString(commandData).Split(',');
string fileName = Command[0];
fileSize = Convert.ToInt64(Command[1]);
Program.thFP.Start(); // running transfer rate
Program.fp.StatusLabel("Receiving data...");
transferRate.timeLeft();
// receiving the file data from server
FileStream fs = new FileStream(@"D:\" + fileName, FileMode.Create, FileAccess.Write);
byte[] fileData = new byte[packetSize];
try
{
count = 0;
sum = 0;
while (sum < fileSize)
{
count = client.Receive(fileData,0,fileData.Length, SocketFlags.None);
fs.Seek(sum, SeekOrigin.Begin);
fs.Write(fileData, 0, fileData.Length);
sum += count;
Program.fp.ProgressBarFileHandler(sum,fileSize);
}
}
finally
{
busy = false;
fs.Close();
fileData = null;
MessageBox.Show(string.Format("{0} recevied successfully", fileName));
}
}