У меня есть серверное приложение, которое прослушивает соединения через порт 8888. Я также создаю клиентское приложение. Это простое приложение, единственное сложное в нем — управление несколькими соединениями. так что мне просто нужно отправлять файлы между компьютерами, поэтому то, как я это делаю, я не знаю, правильно ли это, но это работает, может быть, вы, ребята, поправите меня. вот мой алгоритм при отправке файла:
NetworkStream stream = \\ initialize it
while(someCondition)
{
// first I open the file for reading and read chunks of it
byte[] chunk = fileRead(file, indexStart, indexEnd) // I have a similar method this is just to illustate my point
stream.Write(chunk, \\other params)
// since I often send large files it will be nice if I can wait here
// until the stream.Write is done. when debuging this the while loop
// executes several times then it waits.
}
а с другой стороны я читаю байты из этого потока и записываю их в файл.
Мне также иногда приходится ждать, потому что я отправляю несколько файлов и хочу убедиться, что первый файл был отправлен, прежде чем переходить к следующему. Я знаю, что могу решить эту проблему, используя метод stream.Read после завершения передачи. и отправка данных обратно от клиента. но иногда я считаю, что будет полезно знать, когда поток.запись завершена.
Редактировать
хорошо, основываясь на ваших ответах, я могу, например, отправить клиенту количество байтов, которое я планирую отправить. и как только клиент получает это количество байтов, это означает, что это сделано. Но мой вопрос в том, эффективно ли это. Я имею в виду делать что-то вроде
на сервере:
запись данных "отправка длины файла"
читать данные «проверить, получил ли клиент длину» (например, ожидая строки в порядке)
записать данные "сообщить клиенту имя файла"
читать данные "проверить, получил ли клиент имя файла"
записать данные "начать отправку фрагментов файла"
читать данные "подождите, пока клиент не ответит, например, строкой ok"