C# Socket发送文件前,我想先发送文件大小。下面这个例子中的fs.Length是1115,为什么转换为字节数组的时候,lenArr[0]=91,lenArr[1]=4,剩下的都是0.这样加起来不够数啊byte[] lenArr = BitConverter.GetBytes(fs.Length);

解决方案 »

  1.   


    服务器接收:
    Socket handler = listener.EndAcceptSocket(ar);
    //
    byte[] filenamebyte = new byte[128];
    int namesize = handler.Receive(filenamebyte);  //Receive 接收时会得到一个长度
    string filename = Encoding.UTF8.GetString(filenamebyte,0,namesize);
      

  2.   

    byte[] filenamebyte = new byte[128];//我想动态定义长度,而不是写常量
      

  3.   

    你不是说先发送文件大小吗?文件大小你是不知道的,随传送文件的大小不同而改变....所以接收 文件长度时候 没法固定byte[]数组长度文件大小--是一个数字 ,大也大不到那里去....
    byte[] size = new byte[128];
    int strsize = handler.Receive(size);int filesize = Convert.ToInt32(Encoding.UTF8.GetString(size ,0,strsize));
      //文件大小传过来了
      

  4.   

    byte[] abyte=System.Text.ASCIIEncoding.ASCII.GetBytes("1115");
    这样长度不久动态了
      

  5.   

    哦,好的!可是我在调试的时候还是发现别的问题
                byte[] temp = new byte[32];
                int length=client.Receive(temp);
                string strLength = Encoding.UTF8.GetString(temp, 0, length);
    //这是服务器端的代码,strLength 的值是"[\0\0\0\0\0\0",这是为什么呢            using (FileStream fs = File.Open(filePath, FileMode.OpenOrCreate))
                {
                    byte[] lenArr = BitConverter.GetBytes(fs.Length);
                    socket.Send(lenArr);
                    fs.Close();
    //这是客户端的代码
      

  6.   

    Encoding.UTF8.GetStringBitConverter.GetBytes  应该是他们的原因:字符编码不一致把
      

  7.   

    客户端:
     byte[] lenArr = Encoding.UTF8.GetBytes(fs.Length.ToString());
      

  8.   

    1115=0x0000045B,在内存里就是5B,04,00,00,就是91,04,00,00
      

  9.   

    楼上的都瞎说些什么呀。
    楼主要发送文件的长度,干嘛要人家先转成字符串,文件长度用4个字节的int32或者8个字节的int64就可以了。
    用序列化也不会解决什么问题。
      

  10.   


    请问怎么发送int类型的值呢?我看了Socket.Send都是要发送byte[]的啊
      

  11.   

    你的这一句byte[] lenArr = BitConverter.GetBytes(fs.Length);是正确的,就是发送它,只是你不知道这个byte[]中的内容,参见我在10楼说的。
      

  12.   


      FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read);
       int bodylenght = (int)file.Length;//获得文件大小怎么发送不用我教你了吧
      

  13.   

    你用byte[] lenArr = BitConverter.GetBytes(fs.Length);生成文件的长度长度是正确的;之所以是lenArr[0]=91,lenArr[1]=4,剩下的都是0.因为91的16进制为5B,其实把以上字符数组按整型转换后的16进制表示为45B,转换为10进制刚好为1115;