套接字聊天室,客户端/服务端发送文字信息都没问题,就是客户端向服务端发送文件数据的时候客户端不弹出选择保存位置弹框
客户端选择文件代码也没问题,路径显示什么都挺正常,就是选择好发送的文件以后点击发送,服务端没有反应...先付上客户端向服务端发送文件的代码段- //向服务端发送文件
- private void btnSendFile_Click(object sender, EventArgs e)
- {
- //用文件流打开 用户选择的 文件
- using(FileStream fs=new FileStream(txtFilePath.Text,FileMode.Open))
- {
- byte[] arrFile=new byte[1024*1024*2];//定义一个2M的数组(缓存区)
- //将文件数据读到数组arrFlie中,并获得读取的真实数据长度length
- int length=fs.Read(arrFile, 0, arrFile.Length);
- byte[] arrFileSend = new byte[length + 1];
- arrFileSend[0] = 1;//1代表发送的是文件数据
- //将arrFile数组里的元素 从第0个拷贝,拷贝到arrFileSend数组里,从第1个位置开始存放,一共存放length个数据
- Buffer.BlockCopy(arrFile, 0, arrFileSend, 1, length);
- //发送包含了标识位的新数据数组到服务端
- socketclient.Send(arrFileSend);
- }
复制代码 然后是服务端接收段的方法代码- void RecMsg(object socketclientpara)
- {
- Socket socketclient = socketclientpara as Socket;
- while (true)
- {
- //定义一个接收用的缓存区(2M字节数组)
- byte[] arrmsgrec = new byte[1024 * 1024 * 2];
- //将接收到的数据存入arrmsgrec数组,并返回真正接收到的数据的长度
- int length = socketclient.Receive(arrmsgrec);
- if (arrmsgrec[0] == 0)//判断发送过来的数据第一个元素是0,则发送过来的是文字数据
- {
- string strmsgrec = System.Text.Encoding.UTF8.GetString(arrmsgrec, 1, length-1);
- ShowMsg(strmsgrec);
- }
- else if (arrmsgrec[0] == 1)//如果是1,则代表发送过来的是文件数据(图片/视频/文件...)
- {
- SaveFileDialog sfd = new SaveFileDialog();//保存文件选择框对象
- if(sfd.ShowDialog()==System.Windows.Forms.DialogResult.OK)//用户选择文件路径后
- {
- string fileSavePath = sfd.FileName;//获得要保存的文件路径
- //创建文件流,然后让文件流来 根据路径 创建一个文件
- using (FileStream fs = new FileStream(fileSavePath, FileMode.Create))
- {
- fs.Write(arrmsgrec,1, length-1);
- ShowMsg("文件保存成功:" + fileSavePath);
- }
- }
- }
- }
- }
复制代码 迷糊了...琢磨半天没琢磨明白
|