黑马程序员技术交流社区
标题:
关于socket聊天程序接收文件的问题
[打印本页]
作者:
文韬
时间:
2013-6-27 10:39
标题:
关于socket聊天程序接收文件的问题
按照视频里说的写代码,客户端能发送文件,但是服务端接收不了文件,发送文件完毕后没有弹出选择保存路径的窗口是怎么回事:
客户端的发送文件的代码:
//向服务端发送文件
private void btnSendFile_Click(object sender, EventArgs e)
{
using(FileStream fs=new FileStream(txtChooseFile.Text,FileMode.Open))
{
byte[]arrFile=new byte[1024*1024*2];//定义一个2m的数组(缓存区)
//将文件数据读到数组 arrFileSend中,并获得读取的真实数据长度length
int length = fs.Read(arrFile,0,arrFile.Length);
byte[] arrFileSend = new byte[length + 1];
arrFileSend[0] = 1;//代表发送的是文件数据
Buffer.BlockCopy(arrFile, 0, arrFileSend, 1, length);
socketClient.Send(arrFileSend);
showMsg("发送成功");
}
}
复制代码
服务端接收文件的代码:
//接收客户端的消息
void RecMsg(object socketClientPara)
{
while (true)
{
Socket socketClient = socketClientPara as Socket;
//定义一个接收的缓存区(2m字节组)
byte[] arrMsgRec = new byte[1024 * 1024 * 2];
//将接收到的数据存入arrMsgRec,并返回真正接收到的数据的长度
int length = socketClient.Receive(arrMsgRec);
//此时是将数组所有的元素都转成字符串,而真正接收到的只有服务端发来的几个字符
if (arrMsgRec[0] == 0)//判断发送过来的数据的第一个元素是0,则代表发送过来的数据为文字数据
{
string strArrMsgRec = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, length);
ShowMsg("客户端 :" + strArrMsgRec);
}
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);
}
}
}
}
}
复制代码
不知道是哪里出错了,请帮我纠正一下,谢谢
作者:
关关雎鸠
时间:
2013-6-27 11:56
调试下吧,在服务端设置断点,看看。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2