技术开发 频道

遇到了在c#中socket如何实现大文件传输

    【IT168技术文档】

 接收端

 private void Receive(Socket socket)

 {

 NetworkStream ns = new NetworkStream(socket);

 FileStream fs = new FileStream("c:\\file.txt", FileMode.OpenOrCreate);

 bool isRead = true;

 while (isRead)

 {

 int count = ns.Read(this._receiveBuf, 0, this._receiveBuf.Length);

 int datanum = 0;

 datanum = BitConverter.ToInt32(this._receiveBuf, 0);  //从buffer中的前4个字节读出count

 if (datanum > 0)                                      //确定每次要接受多少字节数

 {

 fs.Write(this._receiveBuf, 4, datanum);

 }

 else                              //如果接受字节数为0 就推出

 {

 isRead = false;

 }

 }

 this.txtFile.Text = "文件传输成功";

 fs.Close();

 }

 ---------------------

 发送端

 private void btSend_Click(object sender, System.EventArgs e)

 {

 if (this._isConnect)

 {

 _ns = _tc.GetStream();

 string path = this.txtPath.Text.Trim();

 FileStream fs = new FileStream(path, FileMode.Open);

 int sendCount = 0;

 byte[] countbuffer = null;

 byte[] clientbuffer = new byte[1004];

 while (sendCount < fs.Length && _ns.CanWrite)

 {

 int count = fs.Read(_sendBuf, 0, _sendBuf.Length);  //读出要发送的数据

 countbuffer = BitConverter.GetBytes(count);

 countbuffer.CopyTo(clientbuffer,0);

 _sendBuf.CopyTo(clientbuffer, 4);

 this._ns.Write(clientbuffer, 0, 4 + count);          //写入网络流

 sendCount += count;

 }

 countbuffer = BitConverter.GetBytes(0);                //发送完文件后 发送count = 0

 this._ns.Write(countbuffer, 0, countbuffer.Length);    //使接收端停止

 _ns.Close();

 fs.Close();

 }

 }
 

0
相关文章