c#通过Socket读取和发送文件我就是这样用NetworkStream发送文件的。privatevoidgo(){byte[]send=File.ReadAllBytes("example.txt");ns.Write(发送,0,发送长度);}ns当然是一个NetworkStream。现在我想知道如何接收和读取传入的NetworkStream?我知道我需要指定一个缓冲区来像这样读取,ns.Read(buffer,0,buffer.length)。但是哪个缓冲区应该在那里?TCP是一种基于流的协议,这意味着没有像UDP中那样的应用程序消息符号。因此,您无法通过TCP本身检测到应用程序消息的结束位置。所以你需要引入某种检测。通常,您添加后缀(换行符、分号等)或长度标题。在这种情况下,添加长度标头会更容易,因为可以在文件数据中找到所选的后缀。所以发送一个文件看起来像这样:privatevoidSendFile(stringfileName,NetworkStreamns){varbytesToSend=File.ReadAllBytes(fileName);varheader=BitConverter.GetBytes(bytesToSend.Length);ns.Write(header,0,header.Length);ns.Write(bytesToSend,0,bytesToSend.Length);在接收端,检查Read的返回值很重要,因为内容可能是块状的:以上是C#学习教程:c#文件读取和通过套接字发送所有共享内容。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——publicbyte[]ReadFile(NetworkStreamns){varheader=newbyte[4];varbytesLeft=4;变量偏移量=0;//必须重复,因为消息可以成块出现while(bytesLeft>0){varbytesRead=ns.Read(header,offset,bytesLeft);偏移量+=bytesRead;bytesLeft-=bytesRead;}bytesLeft=BitConverter.ToInt32(header,0);偏移量=0;varfileContents=newbyte[bytesLeft];//必须重复,因为消息可以成块出现while(bytesLeft>0){varbytesRead=ns.读取(文件内容,偏移量,bytesLeft);偏移量+=bytesRead;bytesLeft-=bytesRead;}返回文件内容;本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
