Хмм, примерно это выглдит так:
1. Клиент-сервеный вариант подразумевает, что клиент - только передает, сервер - только принимает.
Для двухсторонней реализации, необходимо, запускать на каждом ПК и клиент и сервер.
2. Клиентский скрипт считывает содержимое файла, разбивает его на блоки по N-символов/байт, передает серверу:
* посылает команду, что начинается передача файла, название файла, размер файла
* получает ответ готовности приема
* отправляет 1-ый блок данных
* ожидает ответ о приеме
* получает ответ готовности
* отправляет 2-ой блок данных
* ожидает ответ о приеме
* получает ответ готовности
...
* отправляет поледний блок данных
* ожидает ответ о приеме
* получает ответ готовности
* отправляет команду завершения передачи файла
3. В этот момент у сервера уже есть все отправленные блоки файла, которые он сохраняет в хронологическом порядки в файл.
Для верности еще правильно было бы проверять размер итогового файла на совпадение с данными о файле полученными от клиента.
Подобная тема уже обсуждалась.