dcmsend(1) OFFIS DCMTK dcmsend(1)

dcmsend - یک SCU (ارسال‌کننده) ساده برای ذخیره‌سازی DICOM

dcmsend [options] peer port dcmfile-in...

برنامهٔ dcmsend یک Service Class User (به اختصار SCU) را برای کلاس خدمت ذخیره‌سازی (Storage Service Class) پیاده‌سازی می‌کند. بر خلاف ابزار شناخته‌شدهٔ storescu، ابزار dcmsend گزینه‌های کمتری دارد و از این رو استفاده از آن ساده‌تر است؛ این موضوع اصطلاح «ساده» (simple) را در عنوان آن نیز توضیح می‌دهد. هدف اصلی این برنامه ارسال دسته‌ای کامل از فایل‌های DICOM به یک Storage Service Class Provider (به اختصار SCP) است. dcmsend هم از ارتباط‌های (associations) چندگانه (یکی پس از دیگری) و هم در صورت نیاز به انتقال، از فشرده‌گشایی نمونه‌های DICOM SOP پشتیبانی می‌کند.

peer        نام میزبان طرف مقابل (peer) در DICOM
port        شماره درگاه tcp/ip طرف مقابل
dcmfile-in  فایل یا دایرکتوری DICOM جهت ارسال

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

قالب فایل ورودی:
  +f    --read-file
          خواندن قالب فایل یا مجموعه داده (dataset)
  +fo   --read-file-only
          تنها خواندن قالب فایل (پیش‌فرض)
  -f    --read-dataset
          خواندن مجموعه داده بدون اطلاعات متای فایل
فایل‌های ورودی:
  +rd   --read-from-dicomdir
          خواندن اطلاعات فایل‌های ورودی از DICOMDIR
  +sd   --scan-directories
          پویش دایرکتوری‌ها برای فایل‌های ورودی (dcmfile-in)
  +sp   --scan-pattern  [p]attern: string (تنها همراه با --scan-directories)
          الگو برای تطبیق نام فایل (کاراکترهای عام / wildcards)
          # احتمالاً در همهٔ سیستم‌ها در دسترس نیست
  -r    --no-recurse
          عدم پیمایش بازگشتی در داخل دایرکتوری‌ها (پیش‌فرض)
  +r    --recurse
          پیمایش بازگشتی در دایرکتوری‌های مشخص‌شده
تبدیل transfer syntax:
  -dn   --decompress-never
          هرگز مجموعه‌داده‌های فشرده‌شده را از فشرده‌سازی خارج نکن
  +dls  --decompress-lossless
          فقط فشرده‌سازی بدون‌اتلاف را از حالت فشرده خارج کن (پیش‌فرض)
  +dly  --decompress-lossy
          هر دو فشرده‌سازی بااتلاف و بدون‌اتلاف را از حالت فشرده خارج کن
سطح فشرده‌سازی deflate:
  +cl   --compression-level  [l]evel: integer (پیش‌فرض: 6)
          0=فشرده‌نشده، 1=سریع‌ترین، 9=بهترین فشرده‌سازی
سایر گزینه‌های پردازش:
  -nh   --no-halt
          در مواجهه با اولین فایل ورودی نامعتبر
          یا در صورت برخورد با ذخیره‌سازی ناموفق متوقف نشو
  -nip  --no-illegal-proposal
          هیچ presentation contextای را که شامل transfer syntax
          پیش‌فرض نیست پیشنهاد نده (در صورت نیاز)
  -nuc  --no-uid-checks
          مقادیر UID فایل‌های ورودی را بررسی نکن

نسخه پروتکل IP:
  -i4   --ipv4
          فقط از IPv4 استفاده کن (پیش‌فرض)
  -i6   --ipv6
          فقط از IPv6 استفاده کن
  -i0   --ip-auto
          استفاده از جستجوی DNS برای تعیین پروتکل IP
عناوین موجودیت کاربردی (application entity titles):
  -aet  --aetitle  [a]etitle: string
          تنظیم عنوان AE فراخواننده (پیش‌فرض: DCMSEND)
  -aec  --call  [a]etitle: string
          تنظیم عنوان AE فراخوانده‌شدهٔ طرف مقابل (پیش‌فرض: ANY-SCP)
مدیریت ارتباط (association handling):
  +ma   --multi-associations
          استفاده از چندین association (یکی پس از دیگری)
          در صورت نیاز برای انتقال نمونه‌ها (پیش‌فرض)
  -ma   --single-association
          همیشه تنها از یک association استفاده کن
سایر گزینه‌های شبکه:
  -to   --timeout  [s]econds: integer (پیش‌فرض: نامحدود)
          مهلت زمانی برای درخواست‌های اتصال
  -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)
        --max-send-pdu  [n]umber of bytes: integer (4096..131072)
          محدود کردن حداکثر PDU ارسالی به n بایت
عمومی:
  +crf  --create-report-file  [f]ilename: string
          ایجاد یک گزارش با جزئیات از انتقال
          (در صورت موفقیت) و نوشتن آن در فایل متنی f

یک مورد کاربرد معمول dcmsend ارسال نمونه‌های دلخواه SOP است که به‌صورت فایل‌های DICOM در یک storage SCP ذخیره شده‌اند. دستور زیر دقیقاً همین کار را انجام می‌دهد:

dcmsend --verbose <peer> <port> *.dcm

اگر فایل‌های DICOM در سلسله‌مراتبی از دایرکتوری‌ها در زیر دایرکتوری "IMAGES" ذخیره شده باشند، می‌توان از دستور زیر استفاده کرد:

dcmsend -v <peer> <port> --scan-directories --recurse IMAGES

همچنین می‌توان چندین دایرکتوری را مشخص کرد و رویکردهای یادشده را ترکیب نمود (با استفاده از هر دو نام فایل و دایرکتوری):

dcmsend -v +sd +r <peer> <port> IMAGES_1 IMAGES_2 test.img *.dcm

اگر به نمونه‌های SOP از درون یک فایل DICOMDIR ارجاع داده شده باشد، می‌توان از گزینهٔ --read-from-dicomdir (یا +rd) برای ارسال همهٔ فایل‌های DICOM ارجاع‌داده‌شده بدون بارگذاری آن‌ها پیش از مذاکرهٔ ارتباط (association negotiation) استفاده کرد:

dcmsend -v <peer> <port> --read-from-dicomdir DICOMDIR

و باز هم، تمام رویکردهای بالا را می‌توان به این صورت ترکیب کرد:

dcmsend -v +sd +r +rd <peer> <port> IMAGES_1 IMAGES_2 test.img DICOMDIR *.dcm

گزینهٔ پیش‌فرض --read-file-only اطمینان حاصل می‌کند که فقط فایل‌های DICOM (یعنی آن‌هایی که دارای هدر متا و واژهٔ جادویی "DICM" پس از مقدمه هستند) پردازش شوند. معمولاً هنگام پردازش تعداد زیادی فایل، ایدهٔ خوبی است که با اولین فایل ورودی نامعتبر یا در صورت مواجهه با یک ذخیره‌سازی ناموفق، برنامه متوقف نشود. این کار با استفاده از گزینهٔ --no-halt امکان‌پذیر است. با این حال لطفاً توجه داشته باشید که «ذخیره‌سازی ناموفق» به این معنی نیست که وضعیت DIMSE در پاسخ C-STORE بیانگر خطا است؛ بلکه به این معنی است که درخواست C-STORE نتوانسته است به storage SCP ارسال شود.

اگر به بیش از ۱۲۸ مورد Presentation Context نیاز باشد، که حداکثر تعداد مجاز بر اساس استاندارد DICOM است، پس از تکمیل ارتباط قبلی، یک ارتباط (association) جدید آغاز می‌شود. در مواردی که این رفتار ناخواسته است، می‌توان آن را با استفاده از گزینهٔ --single-association غیرفعال کرد. علاوه بر این، اینکه آیا فقط مجموعه‌داده‌های فشرده‌شدهٔ بدون‌اتلاف (lossless) از حالت فشرده خارج شوند (در صورت نیاز) که حالت پیش‌فرض است، یا مجموعه‌داده‌های فشرده‌شدهٔ بااتلاف (lossy) نیز از حالت فشرده خارج شوند، با استفاده از گزینه‌های --decompress-xxx قابل تعیین است.

به‌منظور دریافت نمای کلی و اطلاعات دقیق دربارهٔ انتقال نمونه‌های DICOM SOP، می‌توان از گزینهٔ --create-report-file برای ایجاد فایل متنی متناظر استفاده کرد. با این حال، این فایل تنها در مرحلهٔ پایانی ایجاد می‌شود، مشروط بر اینکه برنامه پیش از آن (با یک خطا) متوقف نشده باشد.

افزودن دایرکتوری‌ها به‌عنوان پارامتر در خط فرمان تنها در صورتی منطقی است که گزینهٔ --scan-directories نیز داده شده باشد. اگر قرار است فایل‌های موجود در دایرکتوری‌های ارائه‌شده مطابق با یک الگوی نام مشخص انتخاب شوند (مثلاً با استفاده از تطبیق نویسه‌های عمومی (wildcard))، باید از گزینهٔ --scan-pattern استفاده شود. لطفاً توجه داشته باشید که این الگوی فایل فقط بر فایل‌های درون دایرکتوری‌های پیمایش‌شده اعمال می‌شود، و چنانچه هرگونه الگوی دیگری در خط فرمان خارج از گزینهٔ --scan-pattern مشخص شده باشد (مثلاً برای انتخاب فایل‌های بیشتر)، بر دایرکتوری‌های مشخص‌شده اعمال نخواهند شد.

بنابراین، سومین مورد از مثال‌های بالا در دایرکتوری‌های IMAGES_1 و IMAGES_2 به‌صورت بازگشتی پیمایش می‌کند و فایل‌هایی را که در این دو پوشه و تمام زیرپوشه‌های آن‌ها قرار دارند (به‌دلیل گزینهٔ +r) منتقل می‌نماید. علاوه بر این، dcmsend فایل "test.img" و تمامی فایل‌های با پسوند "dcm" را از پوشهٔ کاری جاری منتقل خواهد کرد. توجه داشته باشید که ارائهٔ نام دایرکتوری‌ها بدون فعال کردن گزینهٔ +sd فاقد معنی است.

اساساً برنامهٔ dcmsend از تمام کلاس‌های Storage SOP به‌عنوان یک SCU، از جمله کلاس‌های اختصاصی (private)، پشتیبانی می‌کند. به‌طور پیش‌فرض، برنامه شناسهٔ SOP Class UID فایل DICOM را بررسی می‌کند تا مطمئن شود فقط نمونه‌های معتبر SOP ارسال می‌شوند. با استفاده از گزینهٔ --no-uid-checks می‌توان این بررسی را غیرفعال کرد.

برنامهٔ dcmsend همچنین از تمام سینتکس‌های انتقال (Transfer Syntaxes) تعریف‌شده در استاندارد DICOM پشتیبانی می‌کند. سینتکس‌های انتقال اختصاصی تنها در صورتی قابل استفاده هستند که بررسی UID با گزینهٔ --no-uid-checks غیرفعال شده باشد. با این حال لطفاً توجه داشته باشید که تنها تعداد محدودی از Transfer Syntaxها برای تبدیل به Transfer Syntax پیش‌فرض DICOM یعنی (Implicit VR Little Endian) پشتیبانی می‌شوند. با گزینهٔ --list-decoders سینتکس‌های انتقال پشتیبانی‌شده به‌صورت بومی یا توسط رمزگشاها فهرست می‌شوند. خروجی معمولاً به صورت زیر است:

Transfer Syntaxes supported natively:
- Little Endian Implicit
- Little Endian Explicit
- Big Endian Explicit
Transfer Syntaxes supported by decoders:
- Deflated Explicit VR Little Endian
- JPEG Baseline
- JPEG Extended, Process 2+4
- JPEG Spectral Selection, Non-hierarchical, Process 6+8
- JPEG Full Progression, Non-hierarchical, Process 10+12
- JPEG Lossless, Non-hierarchical, Process 14
- JPEG Lossless, Non-hierarchical, 1st Order Prediction
- JPEG-LS Lossless
- JPEG-LS Lossy (Near-lossless)
- RLE Lossless

از آنجا که dcmsend سعی می‌کند تا حد امکان برای کاربر ساده باشد، به‌طور پیش‌فرض ممکن است Presentation Contextهایی به SCP پیشنهاد شوند که از نظر فنی دقیق «غیرمجاز» هستند. دلیل این امر آن است که طبق استاندارد DICOM، برنامهٔ SCU همیشه باید Transfer Syntax پیش‌فرض DICOM را حداقل در یک Presentation Context مرتبط با هر abstract syntax (یعنی SOP class) پیشنهاد دهد. این الزام در صورتی که SCU تنها به نمونهٔ SOP در فرمت فشرده‌سازی بااتلاف دسترسی داشته باشد یا داده‌های پیکسلیِ از حالت فشرده خارج‌شده برای کدگذاری بیش از حد بزرگ باشند، لغو می‌شود. با گزینهٔ --no-illegal-proposal می‌توان رفتار کاملاً منطبق با DICOM را اجبار کرد، یعنی هیچ Presentation Context احتمالاً غیرمجازی پیشنهاد نخواهد شد، اما نمونهٔ متناظر SOP (در صورت نیاز) رد می‌شود. با این حال توجه داشته باشید که اندازهٔ داده‌های پیکسلیِ فشرده‌گشایی‌شده بررسی نمی‌شود.

سینتکس انتقال پیش‌فرض برای "Lossless JPEG Compression" ،"Lossy JPEGCompression" و غیره، همیشه بر اساس الزامات استاندارد DICOM پیشنهاد نمی‌شوند. همین محدودیت در مورد سایر طرح‌های فشرده‌سازی نیز صدق می‌کند. برای جزئیات به بخش 10 استاندارد DICOM PS 3.5 مراجعه کنید..SH "ثبت وقایع (LOGGING)"

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

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

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

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

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

ابزار dcmsend هنگام پایان کار از کدهای خروج زیر استفاده می‌کند. این امر به کاربر امکان می‌دهد دلیل خاتمهٔ برنامه را بررسی کند.

EXITCODE_NO_ERROR                         0
EXITCODE_COMMANDLINE_SYNTAX_ERROR         1

EXITCODE_CANNOT_READ_INPUT_FILE          20 (*)
EXITCODE_NO_INPUT_FILES                  21
EXITCODE_INVALID_INPUT_FILE              22
EXITCODE_NO_VALID_INPUT_FILES            23

EXITCODE_CANNOT_WRITE_OUTPUT_FILE        40 (*)
EXITCODE_CANNOT_WRITE_REPORT_FILE        43

EXITCODE_CANNOT_INITIALIZE_NETWORK       60
EXITCODE_CANNOT_NEGOTIATE_ASSOCIATION    61
EXITCODE_CANNOT_SEND_REQUEST             62
EXITCODE_CANNOT_ADD_PRESENTATION_CONTEXT 65

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

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

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

dcmrecv(1), storescu(1), storescp(1)

حق نشر (C) 2011-2025 متعلق است به OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany.

Thu Jul 9 2026 18:43:40 Version 3.7.0