Cara bekerja dengan Sockets di C #

Komunikasi antar proses adalah kemampuan untuk bertukar data antara dua atau lebih proses yang terhubung dan dapat dicapai dengan menggunakan soket. Setelah koneksi antara server dan klien, yaitu, proses server dan proses klien dibuat, mereka dapat berkomunikasi untuk tujuan pertukaran data menggunakan soket.

Soket adalah titik akhir komunikasi dua arah antara dua proses yang berjalan melalui jaringan. Anda dapat memanfaatkan namespace System.Net dan System.Net.Sockets untuk bekerja dengan soket di C #. Sementara yang pertama digunakan untuk operasi tingkat tinggi menggunakan soket, yang terakhir digunakan untuk setiap operasi tingkat rendah saat bekerja dengan soket.

Saat bekerja dengan soket, Anda dapat menggunakan mekanisme komunikasi TCP / IP (Transmission Control Protocol / Internet protocol) atau UDP / IP (User Datagram Protocol / Internet protocol). Untuk bertukar data antara dua atau lebih proses melalui jaringan, Anda dapat memanfaatkan protokol transport TCP dan UDP. Sementara TCP (Transmission Control Protocol) adalah protokol berorientasi koneksi yang aman dan andal, UDP (User Datagram Protocol) adalah protokol yang relatif kurang aman atau andal, cepat, dan tanpa koneksi.

Daftar kode berikut menggambarkan bagaimana Anda dapat memanfaatkan kelas System.Net.Dns untuk menampilkan alamat IP sistem Anda.

public static void Main(string[] args)

        {

            string hostName = Dns.GetHostName();

            try

            {

                IPAddress[] ipAddress = Dns.Resolve(hostName).AddressList;

                foreach (IPAddress address in ipAddress)

                    Console.WriteLine("{0}/{1}", hostName, address);

            }

            catch (Exception ex)

            {

                Console.WriteLine("Error occurred: "+ex.Message);

            }

            Console.Read();

        }

Lihat daftar kode di atas. Sementara metode Dns.GetHostName () mengembalikan nama sistem, metode Dns.Resolve () digunakan untuk mengambil array tipe IPHostEntry.

Mengambil informasi jaringan

Namespace System.Net.NetworkInformation dapat digunakan untuk mengambil metadata jaringan (yaitu, perubahan jaringan, kejadian jaringan, properti, dll.) Di C #. Sebagai contoh, jika Anda ingin memeriksa apakah koneksi jaringan tersedia, Anda dapat menggunakan metode GetIsNetworkAvailable () seperti yang ditunjukkan di bawah ini.

System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable ();

Berikut cara memanggil metode ini dalam kode Anda.

Boolean networkAvailable = NetworkInterface.GetIsNetworkAvailable();

Jika Anda ingin memantau perubahan dalam alamat IP, Anda dapat menggunakan kejadian berikut dari kelas NetworkChange.

System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged

System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged

Untuk mengambil informasi pada antarmuka jaringan Anda bisa menggunakan metode GetAllNetworkInterfaces () dari kelas NetworkInterface.

NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();

Setelah Anda mengambil daftar semua antarmuka jaringan, Anda dapat menggunakan potongan kode berikut untuk menampilkan informasi dari setiap antarmuka jaringan di konsol.

foreach (NetworkInterface networkInterface in networkInterfaces)

            {

                Console.WriteLine("Network ID :  " + networkInterface.Id);

                Console.WriteLine("Network Name :  " + networkInterface.Name);

                Console.WriteLine("Network Description\n:  " + networkInterface.Description);               

            }

Berikut daftar kode lengkap untuk referensi Anda.

static void Main(string[] args)

        {

            NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();

            foreach (NetworkInterface networkInterface in networkInterfaces)

            {

                Console.WriteLine("Network ID  :  " + networkInterface.Id);

                Console.WriteLine("Network Name  :  " + networkInterface.Name);

                Console.WriteLine("Network Description  \n:  " + networkInterface.Description);               

            }

            Console.Read();

        }

Pemrograman Client-Server

Saat bekerja dengan pemrograman jaringan menggunakan TCP, Anda biasanya perlu membuat proses server yang harus dimulai di port tertentu dan juga proses klien yang dapat dimulai di port mana pun dan mengirim permintaan koneksi ke server. Proses server setelah dimulai, mendengarkan permintaan koneksi masuk di port tempat ia telah dimulai. Potongan kode berikut menggambarkan bagaimana Anda dapat memanfaatkan kelas System.Net.Sockets.TcpListener dan menggunakannya bersama dengan kelas soket.

TcpListener listener = new TcpListener(1234);

listener.Start();

Socket socket = listener.AcceptSocket();

Stream networkStream = new NetworkStream(socket);

Potongan kode berikut menggambarkan bagaimana klien soket Anda dapat terhubung ke server menggunakan protokol TCP.

String ipAddress = "specify the ip address here";

System.Net.IPAddress ipAddress = System.Net.IPAddress.Parse(ipAddress);

System.Net.IPEndPoint remoteEndPoint = new IPEndPoint (ipAddress,9000);

socketClient.Connect (remoteEndPoint);

Untuk mengirim data ke server dari klien, Anda dapat menggunakan potongan kode berikut.

try

{

  String text = "Hello World!";

  byte[] data = System.Text.Encoding.ASCII.GetBytes(text);

  socketClient.Send(data);

}

catch (SocketException se)

{

  //Write your exception handling code here

}

Metode Receive () dari kelas soket dapat digunakan untuk menerima data. Berikut cara menggunakannya untuk mengambil data dari soket. Perhatikan bahwa kedua metode Kirim dan Terima memblokir, yaitu, mereka akan memblokir utas yang saat ini sedang dijalankan hingga data telah dikirim atau diterima.

byte[] data = new byte[1024];

int i = socketClient.Receive (data);

Perhatikan bahwa Anda harus memasukkan ruang nama System.Net dan System.Net.Sockets dalam program Anda untuk bekerja dengan soket.

using System.Net;

using System.Net.Sockets;