dcmrecv(1) OFFIS DCMTK dcmrecv(1)

dcmrecv - سرور دریافت پرونده‌های ذخیره‌سازی DICOM (کلاس SCP)

dcmrecv [options] port

برنامه dcmrecv یک ارائه‌دهنده کلاس سرویس (SCP) را برای کلاس سرویس ذخیره‌سازی (Storage Service Class) پیاده‌سازی می‌کند. بر خلاف ابزار نام‌آشنای storescp، برنامه dcmrecv گزینه‌های کمتری دارد و بنابراین ممکن است استفاده از آن آسان‌تر باشد؛ این نکته دلیل به‌کارگیری واژه «ساده» (simple) را در عنوان توضیح می‌دهد. هدف اصلی این برنامه دریافت مجموعه‌ای از مجموعه‌داده‌های DICOM از یک کاربر کلاس سرویس ذخیره‌سازی (SCU) و ذخیره آن‌ها در یک ساختار پوشه و فایل قابل پیکربندی است.

port  شماره پورت tcp/ip برای شنود

-h    --help
        چاپ این متن راهنما و خروج
      --version
        چاپ اطلاعات نسخه و خروج
      --arguments
        چاپ آرگومان‌های بسط‌یافته خط فرمان
-q    --quiet
        حالت خاموش، عدم چاپ هشدارها و خطاها
-v    --verbose
        حالت پرگویی، چاپ جزئیات پردازش
-d    --debug
        حالت اشکال‌زدایی، چاپ اطلاعات اشکال‌زدایی
-ll   --log-level  [l]evel: string constant
        (fatal, error, warn, info, debug, trace)
        استفاده از سطح l برای ثبت‌کننده وقایع
-lc   --log-config  [f]ilename: string
        استفاده از فایل پیکربندی f برای ثبت‌کننده وقایع
+v    --verbose-pc
        نمایش زمینه‌های ارائه در حالت پرگویی

نسخه پروتکل IP:
  -i4   --ipv4
          تنها استفاده از IPv4 (پیش‌فرض)
  -i6   --ipv6
          تنها استفاده از IPv6
  -i0   --ip-auto
          استفاده از پشته دوگانه IPv6/IPv4
پروفایل مذاکره ارتباط از فایل پیکربندی:
  -xf   --config-file  [f]ilename, [p]rofile: string
          استفاده از پروفایل p از فایل پیکربندی f
عنوان موجودیت برنامه (AE title):
  -uca  --use-called-aetitle
          همیشه با عنوان AE فراخوانده‌شده پاسخ دهد (پیش‌فرض)
  -aet  --aetitle  [a]etitle: string
          تنظیم عنوان AE محلی و بررسی عنوان AE فراخوانده‌شده
سایر گزینه‌های شبکه:
  -ta   --acse-timeout  [s]econds: integer (پیش‌فرض: 30)
          مهلت زمانی برای پیام‌های ACSE
  -td   --dimse-timeout  [s]econds: integer (پیش‌فرض: نامحدود)
          مهلت زمانی برای پیام‌های DIMSE
  -pdu  --max-pdu  [n]umber of bytes: integer (4096..131072)
          تنظیم حداکثر PDU دریافتی روی n بایت (پیش‌فرض: 16384)
  -dhl  --disable-host-lookup  غیرفعال کردن جستجوی نام میزبان

پشته پروتکل انتقال:
  -tls  --disable-tls
          استفاده از اتصال معمولی TCP/IP (پیش‌فرض)
  +tls  --enable-tls  [p]rivate key file, [c]ertificate file: string
          استفاده از اتصال امن و احراز هویت‌شده TLS
گذرواژه کلید خصوصی (فقط با --enable-tls):
  +ps   --std-passwd
          درخواست گذرواژه از کاربر در ورودی استاندارد stdin (پیش‌فرض)
  +pw   --use-passwd  [p]assword: string
          استفاده از گذرواژه مشخص‌شده
  -pw   --null-passwd
          استفاده از رشته خالی به عنوان گذرواژه
قالب فایل کلید و گواهی:
  -pem  --pem-keys
          خواندن کلیدها و گواهی‌ها به صورت فایل PEM (پیش‌فرض)
  -der  --der-keys
          خواندن کلیدها و گواهی‌ها به صورت فایل DER
مرجع صدور گواهی:
  +cf   --add-cert-file  [f]ilename: string
          افزودن فایل گواهی به فهرست گواهی‌ها
  +cd   --add-cert-dir  [d]irectory: string
          افزودن گواهی‌های موجود در پوشه d به فهرست گواهی‌ها
  +crl  --add-crl-file  [f]ilename: string
          افزودن فایل فهرست لغو گواهی
          (مستلزم --enable-crl-vfy)
  +crv  --enable-crl-vfy
          فعال‌سازی اعتبارسنجی CRL گواهی برگ (leaf)
  +cra  --enable-crl-all
          فعال‌سازی اعتبارسنجی کامل زنجیره CRL
پروفایل امنیتی:
  +ph   --list-profiles
          فهرست کردن پروفایل‌های پشتیبانی‌شده TLS و خروج
  +pg   --profile-8996
          پروفایل BCP 195 RFC 8996 TLS (پیش‌فرض)
  +pm   --profile-8996-mod
          پروفایل اصلاح‌شده BCP 195 RFC 8996 TLS
          # تنها در صورتی در دسترس است که کتابخانه زیربنایی TLS از تمام
          # قابلیت‌های TLS مورد نیاز برای این پروفایل پشتیبانی کند
  +py   --profile-bcp195-nd
          پروفایل Non-downgrading BCP 195 TLS (منسوخ‌شده)
  +px   --profile-bcp195
          پروفایل BCP 195 TLS (منسوخ‌شده)
  +pz   --profile-bcp195-ex
          پروفایل Extended BCP 195 TLS (منسوخ‌شده)
  +pb   --profile-basic
          پروفایل اتصال انتقال امن Basic TLS (منسوخ‌شده)
          # تنها در صورتی در دسترس است که کتابخانه زیربنایی TLS از 3DES پشتیبانی کند
  +pa   --profile-aes
          پروفایل اتصال انتقال امن AES TLS (منسوخ‌شده)
  +pn   --profile-null
          ارتباط بدون رمزنگاری همراه با احراز هویت
          (منسوخ‌شده، در IHE ATNA استفاده می‌شد)
مجموعه رمز (ciphersuite):
  +cc   --list-ciphers
          فهرست کردن مجموعه‌های رمز TLS پشتیبانی‌شده و خروج
  +cs   --cipher  [c]iphersuite name: string
          افزودن مجموعه رمز به فهرست مجموعه‌های مورد مذاکره
  +dp   --dhparam  [f]ilename: string
          خواندن پارامترهای DH برای مجموعه‌های رمز DH/DSS
نشانگر نام سرور (SNI):
        --no-sni
          عدم استفاده از SNI (پیش‌فرض)
        --expect-sni  [s]erver name: string
          انتظار درخواست‌ها برای نام سرور s
مولد شبه‌تصادفی:
  +rs   --seed  [f]ilename: string
          تغذیه بذر مولد تصادفی با محتویات f
  +ws   --write-seed
          بازنویسی بذر اصلاح‌شده (تنها با --seed)
  +wf   --write-seed-file  [f]ilename: string (تنها با --seed)
          نوشتن بذر اصلاح‌شده در فایل f
احراز هویت همتا:
  -rc   --require-peer-cert
          اعتبارسنجی گواهی همتا، رد شدن در صورت عدم وجود (پیش‌فرض)
  -vc   --verify-peer-cert
          اعتبارسنجی گواهی همتا در صورت وجود
  -ic   --ignore-peer-cert
          عدم اعتبارسنجی گواهی همتا

عمومی:
  -od   --output-directory  [d]irectory: string (پیش‌فرض: ".")
          نوشتن اشیاء دریافتی در پوشه موجود d
تولید زیرپوشه:
  -s    --no-subdir
          هیچ زیرپوشه‌ای تولید نشود (پیش‌فرض)
  +ssd  --series-date-subdir
          تولید زیرپوشه‌ها از روی تاریخ سری (series date)
تولید نام فایل:
  +fd   --default-filenames
          تولید نام فایل از روی UID نمونه (پیش‌فرض)
  +fu   --unique-filenames
          تولید نام فایل یکتا بر اساس UID جدید
  +fsu  --short-unique-names
          تولید نام فایل کوتاه شبه‌تصادفی یکتا
  +fst  --system-time-names
          تولید نام فایل بر اساس زمان جاری سیستم
  -fe   --filename-extension  [e]xtension: string (پیش‌فرض: هیچ)
          افزودن e به تمام نام فایل‌های تولیدشده
حالت ذخیره‌سازی:
  -B    --normal
          مجاز بودن تبدیل‌های قالب ضمنی (پیش‌فرض)
  +B    --bit-preserving
          نوشتن مجموعه داده دقیقاً همان‌گونه که دریافت شده است
        --ignore
          نادیده گرفتن مجموعه داده، دریافت شود اما ذخیره نگردد

یک کاربرد معمول از dcmrecv دریافت نمونه‌های SOP ارسال‌شده از یک SCU ذخیره‌سازی و ذخیره آن‌ها به عنوان فایل‌های DICOM است. دستور زیر دقیقاً همین کار را انجام می‌دهد:

dcmrecv --verbose <port> --config-file storescp.cfg default

اگر ساختار زیرپوشه‌ای که خودکار ایجاد شود، نام‌های فایل کوتاه‌تر و پسوند ".dcm" را برای تمام فایل‌های DICOM ترجیح می‌دهید، از دستور زیر استفاده کنید:

dcmrecv -v -xf storescp.cfg default <port> --series-date-subdir
                                           --short-unique-names
                                           --filename-extension .dcm

در صورت وجود نمونه‌های SOP بسیار بزرگ یا اگر مجموعه داده باید دقیقاً همان‌گونه که دریافت شده است نوشته شود (مثلاً برای مقاصد اشکال‌زدایی)، می‌توان از «حالت حفظ بیت» (bit preserving mode) استفاده کرد:

dcmrecv -v -xf storescp.cfg default <port> --bit-preserving

مجموعه‌داده‌های دریافتی همیشه به عنوان فایل‌های DICOM با همان نحو انتقالی ذخیره می‌شوند که برای انتقال در شبکه استفاده شده است.

اساساً برنامه dcmrecv از تمام کلاس‌های SOP ذخیره‌سازی به عنوان یک SCP، شامل کلاس‌های اختصاصی (private)، پشتیبانی می‌کند. با این حال، این امر مستلزم آن است که یک پروفایل مذاکره ارتباط متناظر از یک فایل پیکربندی بارگذاری شود. قالب و معناشناسی این فایل پیکربندی در asconfig.txt مستند شده است.

به‌طور پیش‌فرض، یعنی در صورتی که هیچ پروفایل مذاکره ارتباطی بارگذاری نشده باشد، dcmrecv تنها از کلاس SOP تایید (Verification SOP Class) به عنوان یک SCP (با نحو انتقال پیش‌فرض، یعنی Implicit VR Little Endian) پشتیبانی می‌کند.

در آینده، ممکن است گزینه‌های بیشتری اضافه شوند که امکان مشخص کردن مستقیم فهرست زمینه‌های ارائه پشتیبانی‌شده (یعنی ترکیب کلاس SOP و نحوهای انتقال) را بدون بارگذاری فایل پیکربندی فراهم کنند.

گزینه --series-date-subdir امکان تولید زیرپوشه‌ها (در زیر پوشه خروجی مشخص‌شده) را بر اساس مقدار عنصر داده تاریخ سری (Series Date: 0008,0021) از مجموعه داده DICOM دریافتی فراهم می‌کند. اگر این مقدار از مجموعه داده قابل بازیابی باشد و معتبر باشد (یعنی شامل یک فیلد تاریخ معتبر DICOM باشد)، ساختار زیرپوشه به صورت زیر خواهد بود:

<output-directory>/data/<year>/<month>/<day>/<filename>

اگر تاریخ سری (Series Date: 0008,0021) قابل بازیابی نباشد یا نامعتبر باشد، از تاریخ جاری سیستم برای ساختار زیرپوشه زیر استفاده می‌شود:

<output-directory>/undef/<year><month><day>/<filename>

در هر دو حالت، <year> شامل ۴ رقم ده‌دهی و <month> و همچنین <day> شامل ۲ رقم ده‌دهی هستند.

به‌طور پیش‌فرض، نام فایل‌ها برای ذخیره مجموعه‌داده‌های DICOM دریافتی طبق الگوی زیر تولید می‌شوند:

<short-modality-prefix>.<sop-instance-uid><filename-extension>

اگر یک نمونه SOP یکسان دو بار دریافت شود، یک پیام هشدار گزارش شده و فایل موجود بازنویسی می‌شود.

گزینه --unique-filenames اطمینان حاصل می‌کند که هر مجموعه داده DICOM دریافتی در یک فایل جداگانه ذخیره شود، یعنی هیچ فایلی هرگز بازنویسی نشود. این کار با استفاده از یک شناسه یکتای (UID) تازه ایجادشده برای هر نام فایل تولیدی (و میانوند ".X" جهت جلوگیری از تداخل با مقادیر واقعی SOP Instance UID) انجام می‌پذیرد. الگوی نام‌گذاری برای این گزینه به این صورت است:

<short-modality-prefix>.X.<unique-identifier><filename-extension>

هنگامی که گزینه --short-unique-names استفاده می‌شود، نام فایل‌ها توسط یک مولد نام شبه‌تصادفی تولید می‌شوند که همچنین عدم وجود تداخل را تضمین می‌کند (یعنی فایل‌های موجود بازنویسی نمی‌شوند). این الگوی نام‌گذاری به این صورت است:

<short-modality-prefix>_<pseudo-random-name><filename-extension>

که در آن <pseudo-random-name> شامل ۱۶ رقم در نمادگذاری هگزادسیمال است.

در نهایت، گزینه --system-time-names امکان تولید نام فایل‌ها را بر اساس زمان جاری سیستم فراهم می‌کند:

<date><time>.<short-modality-prefix><filename-extension>

که در آن <date> از "<year><month><day>" و <time> از "<hour><minute><second>.<micro-second>" تشکیل شده است. لطفاً توجه داشته باشید که اگر دقت زمان سیستم به اندازه کافی بالا نباشد (یعنی از میکروثانیه پشتیبانی نکند)، این الگو ممکن است منجر به تداخل نام‌گذاری شود.

لطفاً توجه داشته باشید که گزینه --bit-preserving را نمی‌توان همراه با گزینه --series-date-subdir به کار برد، زیرا مجموعه داده دریافتی مستقیماً در فایل ذخیره می‌شود و بنابراین مقدار تاریخ سری (Series Date: 0008,0021) پیش از ایجاد فایل در دسترس نیست.

سطح خروجی ثبت وقایع در ابزارهای مختلف خط فرمان و کتابخانه‌های زیربنایی توسط کاربر قابل تعیین است. به‌طور پیش‌فرض، تنها خطاها و هشدارها در جریان خطای استاندارد نوشته می‌شوند. با استفاده از گزینه --verbose پیام‌های اطلاع‌رسانی مانند جزئیات پردازش نیز گزارش می‌شوند. گزینه --debug می‌تواند برای دریافت جزئیات بیشتر درباره فعالیت داخلی، مثلاً برای مقاصد اشکال‌زدایی، استفاده شود. سایر سطوح ثبت وقایع را می‌توان با گزینه --log-level انتخاب کرد. در حالت --quiet تنها خطاهای مهلک گزارش می‌شوند. در چنین رخدادهای خطای بسیار شدیدی، برنامه معمولاً خاتمه می‌یابد. برای جزئیات بیشتر درباره سطوح مختلف ثبت وقایع، به مستندات ماژول "oflog" مراجعه فرمایید.

در صورتی که خروجی ثبت وقایع باید در فایل نوشته شود (اختیاراً همراه با چرخش فایل گزارش)، در syslog (یونیکس) یا در گزارش رویداد (ویندوز)، می‌توان از گزینه --log-config استفاده کرد. این فایل پیکربندی همچنین امکان هدایت تنها پیام‌های خاص به یک جریان خروجی مشخص و فیلتر کردن پیام‌ها بر اساس ماژول یا برنامه‌ای که در آن تولید شده‌اند را فراهم می‌کند. یک فایل پیکربندی نمونه در <etcdir>/logger.cfg ارائه شده است.

تمامی ابزارهای خط فرمان از نمادگذاری زیر برای پارامترها استفاده می‌کنند: قلاب‌ها مقادیر اختیاری را در بر می‌گیرند (۰-۱)، سه نقطه انتهایی نشان می‌دهد که چندین مقدار مجاز است (۱-n)، و ترکیب هر دو به معنای ۰ تا n مقدار است.

گزینه‌های خط فرمان به ترتیب با علامت پیشوند '+' یا '-' از پارامترها متمایز می‌شوند. معمولاً ترتیب و موقعیت گزینه‌های خط فرمان دلخواه است (یعنی می‌توانند در هر جایی ظاهر شوند). با این حال، اگر گزینه‌ها مانعة‌الجمع باشند، گزینه‌ای که در سمت راست‌تر قرار دارد به کار می‌رود. این رفتار با قواعد ارزیابی استاندارد پوسته‌های معمول یونیکس مطابقت دارد.

علاوه بر این، می‌توان یک یا چند فایل دستور را با استفاده از علامت '@' به عنوان پیشوند نام فایل مشخص کرد (مانند @command.txt). چنین آرگومان دستوری پیش از هرگونه ارزیابی بیشتر با محتوای فایل متنی مربوطه جایگزین می‌شود (چندین فاصله خالی به عنوان یک جداکننده منفرد تلقی می‌شوند مگر اینکه بین دو علامت نقل‌قول قرار گرفته باشند). لطفاً توجه داشته باشید که یک فایل دستور نمی‌تواند شامل یک فایل دستور دیگر باشد. این رویکرد ساده اما کارآمد به کاربر امکان می‌دهد ترکیب‌های رایج گزینه‌ها/پارامترها را خلاصه کرده و از خط فرمان‌های طولانی و گیج‌کننده جلوگیری کند (یک نمونه در فایل <datadir>/dumppat.txt ارائه شده است).

ابزار dcmrecv هنگام خاتمه از کدهای خروج زیر استفاده می‌کند. این امکان به کاربر داده می‌شود تا علت خاتمه برنامه را بررسی کند.

EXITCODE_NO_ERROR                         0
EXITCODE_COMMANDLINE_SYNTAX_ERROR         1

EXITCODE_CANNOT_READ_INPUT_FILE          20 (*)

EXITCODE_CANNOT_WRITE_OUTPUT_FILE        40 (*)
EXITCODE_INVALID_OUTPUT_DIRECTORY        45

EXITCODE_CANNOT_INITIALIZE_NETWORK       60 (*)
EXITCODE_CANNOT_START_SCP_AND_LISTEN     64
EXITCODE_INVALID_ASSOCIATION_CONFIG      66
EXITCODE_CANNOT_CREATE_TRANSPORT_LAYER   71

(*) در واقع، این کدها در حال حاضر توسط dcmrecv استفاده نمی‌شوند، بلکه به عنوان نگه‌دارنده مکان برای گروه متناظر از کدهای خروج عمل می‌کنند.

ابزار dcmrecv تلاش خواهد کرد واژه‌نامه‌های داده‌های DICOM مشخص‌شده در متغیر محیطی DCMDICTPATH را بارگذاری کند. به‌طور پیش‌فرض، یعنی اگر متغیر محیطی DCMDICTPATH تنظیم نشده باشد، فایل <datadir>/dicom.dic بارگذاری خواهد شد مگر اینکه واژه‌نامه درون خود برنامه ساخته شده باشد (پیش‌فرض برای ویندوز).

رفتار پیش‌فرض باید ترجیح داده شود و از متغیر محیطی DCMDICTPATH تنها زمانی استفاده شود که به واژه‌نامه‌های داده‌ای جایگزین نیاز باشد. متغیر محیطی DCMDICTPATH همان قالبی را دارد که متغیر PATH در پوسته یونیکس دارد که در آن دو نقطه (":") ورودی‌ها را جدا می‌کند. در سیستم‌های ویندوز، از نقطه-ویرگول (";") به عنوان جداکننده استفاده می‌شود. کد واژه‌نامه داده‌ها تلاش می‌کند هر فایل مشخص‌شده در متغیر محیطی DCMDICTPATH را بارگذاری کند. در صورتی که هیچ واژه‌نامه داده‌ای بارگذاری نشود، یک خطا خواهد بود.

<docdir>/asconfig.txt - مستندات فایل پیکربندی
<etcdir>/storescp.cfg - نمونه پروفایل مذاکره ارتباط

dcmsend(1), storescu(1), storescp(1)

Copyright (C) 2013-2025 by OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany.

Thu Jul 9 2026 18:43:40 Version 3.7.0