⚠️ Ceci est un site de traduction non officiel, sans lien avec DCMTK / OFFIS. Pour des informations faisant autorité, consultez la page originale (https://support.dcmtk.org/docs/mod_dcmnet.html).

dcmnet: bibliothèque réseau et applications utilitaires

Ce module contient un ensemble de fonctions qui implémentent la communication réseau DICOM, à savoir la machine à états finis de la couche supérieure DICOM (FSM), l'Association Control Service Element (ACSE) et le DICOM Message Service Element (DIMSE).

Les interfaces principales sont les structures et fonctions déclarées dans le fichier assoc.h et dans dimse.h.

Il existe également deux classes expérimentales pour implémenter un DICOM Service Class User et Provider :

Les classes suivantes dérivent des classes expérimentales ci-dessus et fournissent un service DICOM particulier :

Outils

Ce module contient les outils en ligne de commande suivants :

Fichiers

Les fichiers suivants fournissent une documentation complémentaire :

Exemples

L'exemple suivant montre un Echo SCU (Verification Service Class SCU) très simple. La majeure partie du code de gestion des erreurs a été omise par souci de concision, et le code spécifique à l'OS, comme l'initialisation de WinSock sous Win32, n'est pas non plus présenté.

T_ASC_Network *net; // structure réseau, contient la FSM DICOM de couche supérieure, etc.

ASC_initializeNetwork(NET_REQUESTOR, 0, 1000 / timeout /, &net);

T_ASC_Parameters *params; // paramètres de la demande d'association

ASC_createAssociationParameters(&params, ASC_DEFAULTMAXPDU);

// set calling and called AE titles

ASC_setAPTitles(params, "ECHOSCU", "ANY-SCP", NULL);

// the DICOM server accepts connections at server.nowhere.com port 104

ASC_setPresentationAddresses(params, "localhost", "server.nowhere.com:104");

// list of transfer syntaxes, only a single entry here

const char* ts[] = { UID_LittleEndianImplicitTransferSyntax };

// add presentation context to association request

ASC_addPresentationContext(params, 1, UID_VerificationSOPClass, ts, 1);

// request DICOM association

T_ASC_Association *assoc;

if (ASC_requestAssociation(net, params, &assoc).good())

{

if (ASC_countAcceptedPresentationContexts(params) == 1)

{

// the remote SCP has accepted the Verification Service Class

DIC_US id = assoc->nextMsgID++; // génère l'ID de message suivant

DIC_US status; // le statut DIMSE de la C-ECHO-RSP sera stocké ici

DcmDataset *sd = NULL; // le détail du statut sera stocké ici

// send C-ECHO-RQ and handle response

DIMSE_echoUser(assoc, id, DIMSE_BLOCKING, 0, &status, &sd);

delete sd; // le détail du statut ne nous intéresse pas ici

}

}

ASC_releaseAssociation(assoc); // libère l'association

ASC_destroyAssociation(&assoc); // détruit la structure assoc

ASC_dropNetwork(&net); // détruit la structure net