У меня есть серверное приложение, которое прослушивает соединения через порт 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 после завершения передачи. и отправка данных обратно от клиента. но иногда я верю, что будет полезно узнать, когда закончится stream.write.
Редактировать
хорошо, поэтому, основываясь на ваших ответах, я могу, например, отправить клиенту количество байтов, которые я планирую отправить. и как только клиент получает столько байтов, это означает, что это сделано. Но мой вопрос, если это эффективно. Я имею в виду делать что-то вроде
на сервере:
запись данных "отправка длины файла"
читать данные «проверить, получил ли клиент длину» (например, ожидая строку в порядке)
записать данные "tel клиенту имя файла"
read data «проверить, получил ли клиент имя файла»
записать данные "начать отправку фрагментов файла"
чтение данных "дождитесь, пока клиент ответит строкой ok, например"