Pengirim dan Penerima PGM

Membuat sesi PGM mirip dengan rutinitas pembentukan koneksi yang terkait dengan sesi TCP. Namun, keberangkatan yang signifikan dari sesi TCP adalah bahwa semantik klien dan server dibalik; server (pengirim PGM) terhubung ke grup multicast, sementara klien (penerima PGM) menunggu untuk menerima koneksi. Paragraf berikut merinci langkah-langkah terprogram yang diperlukan untuk membuat pengirim PGM dan penerima PGM. Halaman ini juga menjelaskan mode data yang tersedia untuk sesi PGM.

Pengirim PGM

Untuk membuat pengirim PGM, lakukan langkah-langkah berikut

  1. Buat soket PGM.
  2. ikat soket ke INADDR_ANY.
  3. sambungkan ke alamat transmisi grup multicast.

Tidak ada jabat tangan sesi formal yang dilakukan dengan klien mana pun. Proses koneksi mirip dengan koneksi UDP, karena mengaitkan alamat titik akhir (grup multicast) dengan soket. Setelah selesai, data dapat dikirim pada soket.

Saat pengirim membuat soket PGM dan menyambungkannya ke alamat multicast, sesi PGM dibuat. Sesi multicast yang andal didefinisikan oleh kombinasi pengidentifikasi unik global (GUID) dan port sumber. GUID dihasilkan oleh transportasi. Port sSource ditentukan oleh transportasi, dan tidak ada kontrol yang disediakan di mana port sumber digunakan.

Catatan

Menerima data pada soket pengirim tidak diizinkan, dan menghasilkan kesalahan.

 

Cuplikan kode berikut mengilustrasikan pengaturan pengirim PGM:


SOCKET        s;
SOCKADDR_IN   salocal, sasession;
int           dwSessionPort;

s = socket (AF_INET, SOCK_RDM, IPPROTO_RM);

salocal.sin_family = AF_INET;
salocal.sin_port   = htons (0);    // Port is ignored here
salocal.sin_addr.s_addr = htonl (INADDR_ANY);

bind (s, (SOCKADDR *)&salocal, sizeof(salocal));

//
// Set all relevant sender socket options here
//

//
// Now, connect <entity type="hellip"/>
// Setting the connection port (dwSessionPort) has relevance, and
// can be used to multiplex multiple sessions to the same
// multicast group address over different ports
//
dwSessionPort = 0;
sasession.sin_family = AF_INET;
sasession.sin_port   = htons (dwSessionPort);
sasession.sin_addr.s_addr = inet_addr ("234.5.6.7");

connect (s, (SOCKADDR *)&sasession, sizeof(sasession));

//
// We're now ready to send data!
//



Penerima PGM

Untuk membuat penerima PGM, lakukan langkah-langkah berikut

  1. Buat soket PGM.
  2. ikat soket ke alamat grup multicast tempat pengirim mengirimkan.
  3. Panggil fungsi dengar pada soket untuk menempatkan soket dalam mode mendengarkan. Fungsi mendengarkan kembali saat sesi PGM terdeteksi pada alamat grup multicast dan port yang ditentukan.
  4. Panggil fungsi terima untuk mendapatkan handel soket baru yang sesuai dengan sesi.

Hanya data PGM asli (ODATA) yang memicu penerimaan sesi baru. Dengan demikian, lalu lintas PGM lainnya (seperti paket SPM atau RDATA) dapat diterima oleh transportasi, tetapi tidak mengakibatkan fungsi mendengarkan kembali.

Setelah sesi diterima, handel soket yang dikembalikan digunakan untuk menerima data.

Catatan

Mengirim data pada soket terima tidak diperbolehkan, dan menghasilkan kesalahan.

 

Cuplikan kode berikut mengilustrasikan pengaturan penerima PGM:


SOCKET        s,
              sclient;
SOCKADDR_IN   salocal,
              sasession;
int           sasessionsz, dwSessionPort;

s = socket (AF_INET, SOCK_RDM, IPPROTO_RM);

//
// The bind port (dwSessionPort) specified should match that
// which the sender specified in the connect call
//
dwSessionPort = 0;
salocal.sin_family = AF_INET;
salocal.sin_port   = htons (dwSessionPort);    
salocal.sin_addr.s_addr = inet_addr ("234.5.6.7");

bind (s, (SOCKADDR *)&salocal, sizeof(salocal));

//
// Set all relevant receiver socket options here
//

listen (s, 10);

sasessionsz = sizeof(sasession);
sclient = accept (s, (SOCKADDR *)&sasession, &sasessionsz);

//
// accept will return the client socket and we are now ready
// to receive data on the new socket!
//



Mode Data

Sesi PGM memiliki dua opsi untuk mode data: mode pesan dan mode streaming.

Mode pesan sesuai untuk aplikasi yang perlu mengirim pesan diskrit, dan ditentukan oleh jenis soket SOCK_RDM. Mode streaming sesuai untuk aplikasi yang perlu mengirim data streaming ke penerima, seperti aplikasi video atau suara, dan ditentukan oleh jenis soket SOCK_STREAM. Pilihan mode memengaruhi cara Winsock memproses data.

Pertimbangkan contoh berikut: Pengirim PGM mode pesan melakukan tiga panggilan ke fungsi WSASend , masing-masing dengan buffer 100 byte. Operasi ini muncul pada kawat sebagai tiga paket PGM diskrit. Di sisi penerima, setiap panggilan ke fungsi WSARecv hanya mengembalikan 100 byte, bahkan jika buffer penerima yang lebih besar disediakan. Sebaliknya, dengan pengirim PGM mode aliran, ketiga transmisi 100 byte tersebut dapat digabungkan menjadi kurang dari tiga paket fisik pada kawat (atau digabungkan ke dalam satu blob data di sisi penerima). Dengan demikian, ketika penerima memanggil salah satu fungsi penerima Windows Sockets, sejumlah data yang telah diterima oleh transportasi PGM dapat dikembalikan ke aplikasi tanpa memperhatikan bagaimana data dikirimkan atau diterima secara fisik.