使用网络流的同步逻辑

本文关键字:同步 网络 | 更新日期: 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报头的结束。