使用网络流的同步逻辑
本文关键字:同步 网络 | 更新日期: 2023-09-27 18:15:49
我使用网络流发送文件名(例如:"text.txt"),然后发送文件。服务器应该读取名称并创建一个写入流来写入数据。服务器在读取命令中从文件中获取名称+数据以仅获取名称的问题。我认为这是不清楚的。问题是我从文件中得到文件名+一些数据。先发送文件名再发送文件数据的代码:
ASCIIEncoding asci = new ASCIIEncoding();
TcpClient clientSocket = new TcpClient(textBox2.Text, 8880);
NetworkStream networkStream = clientSocket.GetStream();
byte[] b = asci.GetBytes(s);//s is the name of the file
networkStream.Write(b, 0, b.Length);
networkStream.Flush();
while(true)
{
file = fileStream.Read(fileBuffer,0,fileBuffer.Length);
networkStream.Write(fileBuffer,0,file);
if(file == 0) break;
}
服务器用
读取名称和数据的代码byte [] buffer2 = new byte[1];
String filename = "";
ASCIIEncoding asci = new ASCIIEncoding();
while (true)
{
int k = networkStream.Read(buffer2, 0, buffer2.Length);
filename = filename+asci.GetString(buffer2, 0, k);
if (k == 0) break;
}
using (Stream fileStream = File.OpenWrite("C:/Users/Laptop/Documents/" + filename))
{
while (true)
{
thisRead = networkStream.Read(dataByte, 0, blockSize);
fileStream.Write(dataByte, 0, thisRead);
if (thisRead == 0) break;
}
谢谢。我想我不知道该怎么说或说明这个问题。
您必须发送一些指示文件名结束的内容。只要没有接收到这个或这些停止字符,服务器就会接收文件名,然后接收有效载荷。
例如,HTTP使用'r'n'r'n
标记HTTP报头的结束。