socket通信文件传输

主机发送方

FileInfo EzoneFile = new FileInfo("文件路径");
                                //打开文件流  
                                FileStream EzoneStream = EzoneFile.OpenRead();
                                //包的大小  
                                int PacketSize = 1024;
                                //包的数量  
                                int PacketCount = (int)(EzoneStream.Length / ((long)PacketSize));
                                //最后一个包的大小  
                                int LastDataPacket = (int)(EzoneStream.Length - ((long)(PacketSize * PacketCount)));
                                //发送[文件名]到客户端  
                                TransferFiles.SendVarData(cSocket, System.Text.Encoding.Unicode.GetBytes(EzoneFile.Name));
                                //发送[包的大小]到客户端  
                                TransferFiles.SendVarData(cSocket, System.Text.Encoding.Unicode.GetBytes(PacketSize.ToString()));
                                //发送[包的总数量]到客户端  
                                TransferFiles.SendVarData(cSocket, System.Text.Encoding.Unicode.GetBytes(PacketCount.ToString()));
                                //发送[最后一个包的大小]到客户端  
                                TransferFiles.SendVarData(cSocket, System.Text.Encoding.Unicode.GetBytes(LastDataPacket.ToString()));

                                //数据包  
                                byte[] data = new byte[PacketSize];
                                //开始循环发送数据包  
                                for (int i = 0; i < PacketCount; i++)
                                {
                                    //从文件流读取数据并填充数据包  
                                    EzoneStream.Read(data, 0, data.Length);
                                    //发送数据包  
                                    TransferFiles.SendVarData(cSocket, data);
                                }

                                //如果还有多余的数据包,则应该发送完毕!  
                                if (LastDataPacket != 0)
                                {
                                    data = new byte[LastDataPacket];
                                    EzoneStream.Read(data, 0, data.Length);
                                    TransferFiles.SendVarData(cSocket, data);
                                }

备机接收方

byte[] filename = TransferFiles.ReceiveVarData(s);
                        string SendFileName = System.Text.Encoding.Unicode.GetString(filename);
                        //MessageBox.Show("文件名" + SendFileName);   

                        //获得[包的大小]   
                        string bagSize = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(s));
                        //MessageBox.Show("包大小" + bagSize);   

                        //获得[包的总数量]   
                        int bagCount = int.Parse(System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(s)));
                        //MessageBox.Show("包的总数量" + bagCount);   

                        //获得[最后一个包的大小]   
                        string bagLast = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(s));
                        //MessageBox.Show("最后一个包的大小" + bagLast);   
                        //创建一个新文件   
                        FileStream MyFileStream = new FileStream(Application.StartupPath + @"\Map\" + SendFileName, FileMode.Create, FileAccess.Write);
                        while (true)
                        {
                            byte[] data = TransferFiles.ReceiveVarData(s);
                            if (System.Text.Encoding.Unicode.GetString(data) == "GO")
                            {
                                break;
                            }
                            else
                            {
                                //将接收到的数据包写入到文件流对象   
                                MyFileStream.Write(data, 0, data.Length);
                            }
                        }
                        //关闭文件流   
                        MyFileStream.Close();

时间仓促,写的有点急,以后在修改请多多见谅

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值