Пример #1
0
        //发送文件
        private void button_file_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string file_name = openFileDialog1.SafeFileName;   //文件名
                string file_path = openFileDialog1.FileName;       //文件全路径

                long file_length = new FileInfo(file_path).Length; //以字节为单位
                if (file_length > 100 * 1000 * 1000)               //超过100M
                {
                    MessageBox.Show("文件大小不能超过100M", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                else if (file_length <= 0)
                {
                    MessageBox.Show("文件为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                Sock_connected.Send_message_NumString(3, file_name);

                add_msg2list("系统消息", "正在发送文件:" + file_path, Color.Red);

                byte[] buffer_Chat_send = new byte[1024 * 1024 * 110];//110M缓存

                using (FileStream fs = new FileStream(file_path, FileMode.Open, FileAccess.Read))
                {
                    int readLength = 0;
                    //bool firstRead = true;
                    //long sentFileLength = 0;

                    readLength = fs.Read(buffer_Chat_send, 0, buffer_Chat_send.Length);
                    Sock_connected.Send_message_NumByte(2, buffer_Chat_send, readLength);

                    /*while ((readLength = fs.Read(buffer_Chat_send, 0, buffer_Chat_send.Length)) > 0 && sentFileLength < file_length)
                     * {
                     *  sentFileLength += readLength;
                     *
                     *  //第一次发送的字节流上加前缀
                     *  if (firstRead)
                     *  {
                     *      //第一个字节标记2,代表为文件
                     *      Sock_connected.Send_message_NumByte(2, buffer_Chat_send, readLength);
                     *      firstRead = false;
                     *  }
                     *  Sock_connected.sock.Send(buffer_Chat_send, 0, readLength, SocketFlags.None);
                     * }*/

                    fs.Close();
                }
            }
        }
Пример #2
0
        private void button_sendFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog openf_d = new OpenFileDialog();

            if (openf_d.ShowDialog() == DialogResult.OK)
            {
                string file_name = openf_d.SafeFileName;           //文件名
                string file_path = openf_d.FileName;               //文件全路径

                long file_length = new FileInfo(file_path).Length; //以字节为单位
                if (file_length > 30 * 1000 * 1000)                //超过100M
                {
                    MessageBox.Show("文件大小不能超过30M", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                else if (file_length <= 0)
                {
                    MessageBox.Show("文件为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                myFileInfo file_info = new myFileInfo(file_length, file_name);

                if (!host_flag)
                {
                    if (fileInfo_list.Exists(x => x == file_info))
                    {
                        MessageBox.Show("文件已存在。", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }

                    host_connectNC.Send_message_NumString(3, file_length.ToString() + '_' + file_name);

                    add_msg2list("系统消息", "正在上传文件:" + file_path, Color.Red);

                    byte[] buffer_file_send = new byte[1024 * 1024 * 35];//35M缓存

                    using (FileStream fs = new FileStream(file_path, FileMode.Open, FileAccess.Read))
                    {
                        int readLength = fs.Read(buffer_file_send, 0, buffer_file_send.Length);
                        host_connectNC.Send_message_NumByte(2, buffer_file_send, readLength);

                        fs.Close();
                    }
                }
                else
                {
                    if (host_file_list.Keys.Contains(file_info))
                    {
                        MessageBox.Show("文件已存在。", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }

                    byte[] buffer_file_send = new byte[1024 * 1024 * 35];//35M缓存

                    add_msg2list("系统消息", "正在上传文件:" + file_path, Color.Red);

                    using (FileStream fs = new FileStream(file_path, FileMode.Open, FileAccess.Read))
                    {
                        int readLength = 0;

                        readLength = fs.Read(buffer_file_send, 0, buffer_file_send.Length);
                        byte[] file_bytes = new byte[readLength];
                        Buffer.BlockCopy(buffer_file_send, 0, file_bytes, 0, readLength);
                        host_file_list.Add(file_info, file_bytes);

                        fs.Close();
                    }

                    send_fileInfo2all_users(file_info, my_name);
                    add_file2list(file_info, my_name, Color.Black);
                }
            }
        }