логика синхронизации при использовании сетевого потока - PullRequest
0 голосов
/ 25 ноября 2011

Я использую сетевой поток для отправки имени файла (пример: «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;

    }

спасибо.я думаю, что не знаю, как сказать или проиллюстрировать проблему.

1 Ответ

1 голос
/ 25 ноября 2011

Вы должны отправить что-то, что указывает на конец имени файла. Сервер получает имя файла до тех пор, пока не получен этот или эти символы остановки, а затем получает полезную нагрузку.

Например, HTTP использует \r\n\r\n, чтобы отметить конец заголовка HTTP.

...