目前问题如下:【1】我使用filestream将文件一块一块的读到byte数组中,然后发送。代码如下:
state.fs = new FileStream(aa,FileMode.Open,FileAccess.Read);
FileSize = state.fs.Read(xx, 0, xx.Length); 
然后发送xx字节数组,可是有时总出现这个异常“不能访问已关闭的文件”,这是怎么回事??虽然我有fs.close,但是都在整个发送完毕后,才关的亚。【2】接收方也遇到这个问题,就是在分块接收时候,出现“不能访问已关闭的文件”【3】我在接收文本、WORD、图片格式文件都没有问题。可是在接收音频文件时,有个别文件在接手后,播放过程中有错位现象。这是怎么回事?以上三个问题,盼复。。谢谢。。急

解决方案 »

  1.   

    能说具体点吗?那块和延时有关?发送文件数据还是接收文件数据?我在发送数据那块,设置了每发送一块后sleep(100)。还有多线程用在哪里?我现在通讯就是多线程和异步。
      

  2.   

    FileSize = state.fs.Read(xx, 0, xx.Length); 
    ----------
    你能保证每次都能读入 xx.Length长度的数据到xx数组吗,万一要读取的数据长度小于xx.Length呢,不是要错了吗
      

  3.   

    你应该要判断一下:还未读取数据的长度和xx.Length长度比较
      

  4.   

    我设断点。监测了一下。如果最后没有xx.length长度,那么fs会自动把剩余的数据读出来。好像不用再特意改变该处的值了吧?
      

  5.   

    对这块我是用
    do
    {}
    while(totalFileSize>CurrentFileSize)
    写的,每次读完都让currentFileSize加上这次读取数写这块,我也是有CurrentFileSize和TotalFileSize每次收完都让CurrentFileSize加上这次收取的大小数。不知这么做是否正确。还有你说的“有可能这两个文件刚好读完呀"是不是我上面的做法已经可以解决了?
      

  6.   

    而且对于下面的代码
    state.fs = new FileStream(aa,FileMode.Open,FileAccess.Read);
    FileSize = state.fs.Read(xx, 0, xx.Length); 
    中的xx字节数组的维数,我已经通过增加CurrentFileSize的方法计算出来了。目前问题在于,有时传个别的音频文件或出现错位播放或卡的问题。这个问题出现在局域网中两台机子。如果在一台机子上测试则没有问题。不知是不是由于传输造成的。你发给我的程序,我看了一下。有些地方和我的思路不大一样。不过给了我许多启发。再次感谢你。如果方便。能否给我留下QQ,以后经常交流。
      

  7.   

    1、每次发送文件后你可以计算出文件的剩余字节数,如果它大于 xx.Length,则FileSize = state.fs.Read(xx, 0, xx.Length); 如果文件的剩余字节数小于 xx.Length,则FileSize = state.fs.Read(xx, 0, 文件的剩余字节数); 
    2、如果是传输造成的你可以在两次发送之间停顿10ms试试,另外你的数据包大小是多大,尽量不要太大
      

  8.   

    还有个问题,我在接收数据时,使用了 socket.Available这个属性,来判断是否有数据等待接收。但是好像发现有时不是很好用。