110,539
社区成员
发帖
与我相关
我的任务
分享
public void SendFile(Socket s, string filename)
{
FileInfo fi = new FileInfo(filename);
byte[] len = BitConverter.GetBytes(fi.Length);
//首先把文件长度发送过去
s.BeginSendFile(filename,len,null,TransmitFileOptions.UseDefaultWorkerThread,new AsyncCallback(SendFileCallback),null);
}
public void SendFileCallback(IAsyncResult iar)
{
clientSocket.EndSendFile(iar);
lstServer.Items.Add(DateTime.Now + "The pic\"" + path + "\" has been SENT....");
}
public void BeginReceive()//调用此函数 接收文件的开始工作
{
byte[] buffer = new byte[8];
//由于long占8位字节,所以先获取前8位字节数据
IAsyncResult iar = client.BeginReceive(
buffer,
0,
buffer.Length,
SocketFlags.None,
null,
null);
int len = client.EndReceive(iar);
int offset = 0;
int length = BitConverter.ToInt32(buffer, offset); //先获取文件长度
ReceiveFile(length);
BeginReceive(); //继续接收
}
public void ReceiveFile(long filelen)
{
MemoryStream ms = new MemoryStream();
int bytesRead = 0;
long count = 0;
long filelen1 = filelen;
int filelen2 = (int)filelen1;
byte[] buffer = new byte[filelen2];
i+=1;
string i1 = Convert.ToString(i);
string fileNameTime = DateTime.Now.ToString("yyyyMMddhhmmss");
string filenameuse = i1+"-"+fileNameTime ;
while (count != filelen)
{
if (!Directory.Exists("pics/"))//如果不存在该文件夹 也就是被删掉了 就先建一个
{
System.IO.Directory.CreateDirectory("pics/");
}
bytesRead = client.Receive(buffer, buffer.Length, 0);
ms.Write(buffer, 0, bytesRead);
count += bytesRead;
if (count == bytesRead)//写进去文件夹
{
FileStream fs2 = new FileStream("pics/"+filenameuse + ".jpg", FileMode.Create);
BufferedStream bs2 = new BufferedStream(fs2);
fs2.Write(buffer, 0, bytesRead);
fs2.Flush();
fs2.Close();
}
else
{
FileStream fs2 = new FileStream("pics/"+filenameuse + ".jpg", FileMode.Append);
BufferedStream bs2 = new BufferedStream(fs2);
fs2.Write(buffer, 0, bytesRead);
fs2.Flush();
fs2.Close();
}
}
pictureBox1.ImageLocation = "pics/" + filenameuse + ".jpg";
}