Вам нужно будет узнать или попросить пользователя указать путь, по которому будет найден файл изображения.
Получив это, вы логически открываете файл, считываете его в буфер, затем записываете этот буфер в сокет и, наконец, закрываете файл (всегда закрывайте то, что открываете, и освобождайте то, что вы выделяете). Однако есть детали, которые нужно отсортировать - например, откуда получающая сторона узнает, что следующие данные являются изображением, и насколько она велика (поэтому она знает, когда вы отправили все это). Ваш протокол, по-видимому, определит битовую комбинацию (один или два байта), которая идентифицирует сообщение как изображение, а затем, вероятно, использует четыре байта для указания размера изображения, за которым следует правильное количество байтов. Вы можете узнать размер файла, используя системный вызов stat()
на основе POSIX. Кроме того, вы можете отправить серию пакетов, содержащих части изображения (опять же с типом - на этот раз типа «пакет изображения» вместо «изображение») плюс длину пакета (который может быть только 16-битным целое число без знака (максимальный размер 65535 байт), а также «пакет конечного изображения» для последнего сегмента. Это, возможно, проще для отправителя; для получателя легко, если данные идут прямо в файл, но грязно, если получателю нужно изображение в памяти.