Чтение файла и запись в сокет - это две разные операции. Winsock не имеет API для прямой отправки файла.
Что касается чтения файла, просто убедитесь, что вы открываете его в режиме чтения двоичных файлов при использовании fopen, или просто используйте CreateFile и ReadFile Win32 API, и он будет двоичным режим по умолчанию.
Обычно вы будете читать файл порциями (например, 10 КБ за раз), а затем отправлять каждый из этих порций через сокет, используя send или WSASend . Как только вы закончите, вы можете закрыть сокет.
На принимающей стороне читайте все, что доступно на сокете, пока сокет не закроется. Когда вы читаете данные в буфер, запишите количество прочитанного в файл.