2013-11-21 95 views
-2
string s1 = Encoding.ASCII.GetString(buf2); 

我看到类型字符串只限制8个字节(8个字符)。每个人都可以告诉我如何接收超过8个字节? 详情:大小类型字符串

服务器

 byte[] buf = Encoding.ASCII.GetBytes(fileSize.ToString()); 
     MemoryStream ms = new MemoryStream();  
     ms.Write(buf,0,buf.Length); 
     ms.Seek(0, SeekOrigin.Begin); 
     byte[] buf2 = new byte[32*1024]; 
     ms.Read(buf2,0,buf2.Length); 
     FileStream fs = File.OpenRead(savefilename); 
     MessageBox.Show("1 " + buf2.Length +" "+ fileSize+" "+ms.Length); 
     int ns = sendSocket.Send(buf2, sizeof(ulong), SocketFlags.None); 

客户

  byte[] buf = new byte[32 * 1024]; 
      int nr = listenSocket2.Receive(buf, sizeof(ulong), SocketFlags.None); 
      MemoryStream ms = new MemoryStream(); 
      ms.Write(buf, 0, buf.Length); 
      ms.Seek(0, SeekOrigin.Begin); 
      byte[] buf2 = new byte[32 * 1024]; 
      ms.Read(buf2, 0, buf2.Length); 

      string s1 = Encoding.ASCII.GetString(buf2); 
      MessageBox.Show("" + s1+" "+ms.Length); 
      ulong fileSize = UInt64.Parse(s1); 

S1不大于8个字符的

+1

字符串数据类型可以容纳您需要的任何(合理)数量的字符。你有没有尝试使用更大的缓冲区? –

+4

什么是buf2?你确定它是有效的ASCII数据吗? – shf301

+0

@ p.s.w.g + shf301。我使用buf 32KB :(这行代码我在应用程序发送文件中使用。这是它:[link](https://www.mediafire.com/?qqbphpr3r2zbl92) –

回答

1

下面的行

int nr = listenSocket2.Receive(buf, sizeof(ulong), SocketFlags.None); 

读取的F来自流的前8个字节。这意味着包含文件的大小。您应该发出另一个Receive以接收实际的文件内容。

+0

其他吗?我声明接收** sizeof (ulong)** :( –

+0

是的,你表示你想要接收8个字节,这就是你所得到的,这8个字节包含了剩余消息的长度,你的例子并不显示你实际发送的文件内容 –

+0

谢谢@ C.Evenhuis :) –