俺有局域网传文件源码
是一个局域网QQ的功能之一
http://www.cnblogs.com/tuyile006/archive/2006/12/30/607823.html

解决方案 »

  1.   

    建议用remoting建产文档服务,以Stream传输,实现简单,一个类就OK
    remoting在局域网性能好
      

  2.   

    望各位高手,详细指点下,小弟比较笨 若有源码 发小弟一份
    [email protected]
      

  3.   

    关于remoting服务如果构建在.net的快速入门(好像需要手动安装)里有完整的内容,MSDN里也可以查到,文件流的处理看下System.IO.File当然也可以用socket实现,MSND里也有socket实现的相关内容
      

  4.   

    建议用remoting建产文档服务,以Stream传输
      

  5.   

    private void button2_Click(object sender, System.EventArgs e)
    {
    try
    {
    if(openFileDialog1.ShowDialog() == DialogResult.OK)
    {
    txtLocation.Text = openFileDialog1.FileName;
    }
    }
    catch(Exception exc)
    {
    // MessageBox.Show(exc.Message, "提示");
    listBox1.Items.Add(exc.Message);
    }
    } private void button1_Click(object sender, System.EventArgs e)
    {
    try
    {
    ipAddress = IPAddress.Parse(txtIP.Text);
    port = Int32.Parse(txtPort.Text);
    ipEndPoint = new IPEndPoint(ipAddress, port);
    /// udpClient = new UdpClient(ipEndPoint); // 建立UDP连接
    udpClient = new UdpClient(Dns.GetHostByAddress(ipAddress).HostName, port);

    /// udpClient.Connect(ipEndPoint);
    fs = new FileStream(txtLocation.Text, FileMode.Open, FileAccess.Read);            // 判断是否长度超过8K最大允许值
    if(fs.Length > 8192)
    {
    listBox1.Items.Add("本版本文件传输程序传输大小必须小于8192字节!");
    fs.Close();
    udpClient.Close();
    return;
    }

     // 如果成功发送文件信息给接收端,则继续发送文件的内容给接收端
    if(SendFileInfo())
    {    
    Thread.Sleep(2000); // 等待2秒钟
    SendFile();         // 发送文件
    udpClient.Close();
    fs.Close();
    }
    }
    // catch(SocketException se)
    // {
    // listBox1.Items.Add(se.Message +"0");
    // }
    catch(Exception exc)
    {
    // MessageBox.Show(exc.Message, "提示");
    listBox1.Items.Add(exc.Message +"1");
    }
    } public class FileDetails
    {
    public string FILETYPE = "";
    public long FILESIZE = 0;
    } // 发送文件的信息,包括文件的类型以及它的大小
    private bool SendFileInfo()
    {
    try
    {

    // fileDet.FILETYPE = fs.Name.Substring((int)fs.Name.Length - 3, 3);
    FileSystemInfo fileInfo = new FileInfo(txtLocation.Text);
    // 获得文件的扩展名
    fileDet.FILETYPE = fileInfo.Extension; // 获得文件的长度
    fileDet.FILESIZE = fs.Length; XmlSerializer fileSerializer = new XmlSerializer(typeof(FileDetails));
    MemoryStream stream = new MemoryStream(); fileSerializer.Serialize(stream, fileDet); stream.Position = 0;
    byte[] bytes = new byte[stream.Length];
    stream.Read(bytes, 0, Convert.ToInt32(stream.Length));
    // 发送文件的细节
    /// udpClient.Send(bytes, bytes.Length, ipEndPoint);
    udpClient.Send(bytes, bytes.Length);
    listBox1.Items.Add("文件正在发送中...");
    stream.Close();
    return true;
    }
    catch(Exception exc)
    {
    listBox1.Items.Add(exc.Message);
    return false;
    }
    } private void SendFile()
    {
    try
    {
    // 创建文件流
    byte[] bytes = new byte[fs.Length]; fs.Read(bytes, 0, bytes.Length); listBox1.Items.Add("发送的文件大小是: " + fs.Length + "字节"); // 发送文件
    /// udpClient.Send(bytes, bytes.Length, ipEndPoint); 
    udpClient.Send(bytes, bytes.Length); 
    listBox1.Items.Add("文件成功发送!");
    }
    catch(Exception exc)
    {
    listBox1.Items.Add(exc.Message);
    // MessageBox.Show(exc.Message);
    }
    }
      

  6.   

    private void button1_Click(object sender, System.EventArgs e)
    {
    try
    {
    // 改变按钮控件的状态
    UpdateControls(false); 
    udpClient = new UdpClient(Int32.Parse(txtPort.Text));
    threadReceive = new Thread(new ThreadStart(ReceiveMessages));
    threadReceive.Start();
    /// GetFileDetails();
    /// ReceiveFile();
    }
    catch(Exception exc)
    {
    listBox1.Items.Add(exc.Message);
    }
    } private void ReceiveMessages()
    {
    while(true)
    {
    GetFileDetails();
    ReceiveFile();
    }
    } // 停止服务
            private void button2_Click(object sender, System.EventArgs e)
    {
    try
    {
    UpdateControls(true);
    txtIP.Text = "";
    threadReceive.Abort();
    if(fs != null)
    fs.Close();
    udpClient.Close();
    }
    catch(Exception exc)
    {
    listBox1.Items.Add(exc.Message);
    }
    } public class FileDetails
    {
    public string FILETYPE = "";
    public int FILESIZE = 0;
    } private void GetFileDetails()
    {
    try
    {
    listBox1.Items.Add("开始等待文件细节..."); receiveBytes = udpClient.Receive(ref ipEndPoint);
    txtIP.Text = ipEndPoint.Address.ToString();
    listBox1.Items.Add("读取文件细节"); XmlSerializer fileSerializer = new XmlSerializer(typeof(FileDetails));
    MemoryStream stream = new MemoryStream(); stream.Write(receiveBytes, 0, receiveBytes.Length);
    stream.Position = 0; fileDet = (FileDetails)fileSerializer.Deserialize(stream);
    listBox1.Items.Add("接收到的文件其类型是: " + fileDet.FILETYPE + "其大小是: " + fileDet.FILESIZE.ToString() + "字节");
                }
    catch(Exception exc)
    {
    listBox1.Items.Add(exc.Message);
    }
    }
      

  7.   

    我放到我的WEB上去,你自己去复制吧.
    www.netbor.net