2013-11-21 35 views
0

我在网上找到这段代码,并不明白服务器如何发送客户端的全部大小以及为什么客户端可以知道文件大小。帮我回应:(关于操作memoryStream

Code server: 
FileStream fs = null; 
FileInfo fi = new FileInfo(textBox4.Text); 
ulong fileSize = (ulong)fi.Length; 
byte[] buf = new byte[32 * 1024]; 
MemoryStream ms = new MemoryStream(buf);// 
BinaryWriter bw = new BinaryWriter(ms); 
bw.Write(fileSize); 
fs = File.OpenRead(textBox4.Text); 
int ns = socket.Send(buf, sizeof(ulong), SocketFlags.None);//why only 32KB which client 
                 //can know file size 
ulong pos = 0; 
while (pos < fileSize) 
{ int nr = fs.Read(buf, 0, buf.Length); 
    if (nr <= 0) { break; } 
    pos += (ulong)nr; 
    ns = socket.Send(buf, nr, SocketFlags.None); 
} 

代码客户端:

FileStream fs = null; 
fs = File.Create(saveFileName); 
byte[] buf = new byte[32 * 1024]; 
int nr = socket.Receive(buf, sizeof(ulong), SocketFlags.None); 
MemoryStream ms = new MemoryStream(buf); 
BinaryReader br = new BinaryReader(ms); 
ulong fileSize = br.ReadUInt64(); 
ulong pos = 0; 
while (pos < fileSize) 
{  nr = socket.Receive(buf); 
    if (nr <= 0) { throw new Exception("Receive 0 byte"); } 
    pos += (ulong)nr; 
    fs.Write(buf, 0, nr); 
} 

回答

1

服务器首先写的:

bw.Write(fileSize); 

客户端首先读取这样的:

ulong fileSize = br.ReadUInt64(); 

人体工程学,客户端知道有多少个字节低。

+0

谢谢:)。 buf发送几次或只发送一次@ Moo-Juice –

+0

@ThanhBình不确定你的意思 - 在上面粘贴的示例代码中,服务器发送文件的大小,然后发送整个文件本身。客户端读取长度,然后读取,直到它读取了足够的字节(或出现错误并抛出异常)。 –

+0

int ns = socket.Send(buf,sizeof(ulong),SocketFlags.None);我想知道大小buf超过32kb这行代码和套接字发送多次客户端知道大小的文件?对不起,我的英语不好:) –