【发布时间】:2014-01-21 13:34:26
【问题描述】:
我正在通过 TCPClient 和 TCPListener 连接 2 个设备,并且我现在只发送一个字符串,并且一切正常:
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] buffer = encoder.GetBytes("Hello Server!");
clientStream.Write(buffer, 0 , buffer.Length);
clientStream.Flush();
然后
bytesRead = clientStream.Read(message, 0, 4096);
ASCIIEncoding encoder = new ASCIIEncoding();
Console.WriteLine("Mensageee"+ encoder.GetString(message, 0, bytesRead));
但现在我需要发送一个大文件,比如 10mb 或更多,所以我应该使用它吗?
string doc = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
byte[] file = File.ReadAllBytes(doc + filedir)
byte[] fileBuffer = new byte[file.Length];
TcpClient clientSocket = new TcpClient(ip, port);
NetworkStream networkStream = clientSocket.GetStream();
networkStream.Write(file.ToArray(), 0, fileBuffer.GetLength(0));
networkStream.Close();
我应该如何接收所有这些文件,然后将其保存在某个地方? 欢迎任何帮助谢谢o/
【问题讨论】:
-
你为什么在
byte[]上打电话给ToArray()?目前尚不清楚您的fileBuffer变量是什么...networkStream.Write(file, 0, file.Length)有什么问题? -
你说得对,我想我可以使用 networkStream.Write(file, 0, file.Length),这只是我发现的一个随机示例。问题是我如何通过侦听器接收这个大文件,以及如何获得关于仍然缺少多少的反馈,以便我可以更新进度条?
-
嗯,除非你把它放在流中的某个地方,否则你无法知道未来会有多少数据......你需要考虑你的协议。例如,您是否需要能够在同一连接中发送多条消息?
-
我需要做的就是发送一个 .zip 文件,然后关闭连接。 1 个文件 1 次,问题(我不确定它是否有问题)是这个 zip 文件可能只有 100kb 到 100mb。
-
如果您不需要显示进度更新,您可以使用
Stream.CopyTo(otherStream)。
标签: c# sockets xamarin transfer