Cara bekerja dengan Soket di C #

Komunikasi antara proses adalah keupayaan untuk menukar data antara dua atau lebih proses yang bersambung dan dapat dicapai dengan menggunakan soket. Setelah hubungan antara pelayan dan klien, iaitu, proses pelayan 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 rangkaian. Anda boleh memanfaatkan ruang nama System.Net dan System.Net.Sockets untuk berfungsi dengan soket di C #. Walaupun yang pertama digunakan untuk operasi tingkat tinggi menggunakan soket, yang kedua digunakan untuk operasi tingkat rendah ketika bekerja dengan soket.

Semasa bekerja dengan soket, anda boleh menggunakan mekanisme komunikasi TCP / IP (Protokol Kawalan Penghantaran / protokol Internet) atau UDP / IP (Protokol Datagram Pengguna / protokol Internet). Untuk menukar data antara dua atau lebih proses melalui rangkaian, anda dapat memanfaatkan protokol pengangkutan TCP dan UDP. Walaupun TCP (Transmission Control Protocol) adalah protokol berorientasi sambungan yang selamat dan boleh dipercayai, UDP (Protokol Datagram Pengguna) adalah protokol yang relatif kurang selamat atau boleh dipercayai, cepat, dan tanpa sambungan.

Senarai kod berikut menggambarkan bagaimana anda dapat memanfaatkan kelas System.Net.Dns untuk memaparkan 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();

        }

Rujuk senarai kod di atas. Walaupun kaedah Dns.GetHostName () mengembalikan nama sistem, kaedah Dns.Resolve () digunakan untuk mengambil pelbagai jenis IPHostEntry.

Mengambil maklumat rangkaian

Ruang nama System.Net.NetworkInformation boleh digunakan untuk mengambil metadata rangkaian (iaitu, perubahan rangkaian, peristiwa rangkaian, sifat, dll.) Di C #. Sebagai contoh, jika anda ingin memeriksa apakah sambungan rangkaian tersedia, anda boleh menggunakan kaedah GetIsNetworkAvailable () seperti yang ditunjukkan di bawah.

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

Inilah cara anda memanggil kaedah ini dalam kod anda.

Boolean networkAvailable = NetworkInterface.GetIsNetworkAvailable();

Sekiranya anda ingin memantau perubahan dalam alamat IP, anda boleh menggunakan peristiwa berikut dari kelas NetworkChange.

System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged

System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged

Untuk mendapatkan maklumat mengenai antara muka rangkaian, anda boleh menggunakan kaedah GetAllNetworkInterfaces () dari kelas NetworkInterface.

NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();

Setelah anda mendapatkan senarai semua antara muka rangkaian, anda boleh menggunakan kod berikut untuk memaparkan maklumat setiap antara muka rangkaian 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);               

            }

Inilah senarai kod lengkap untuk rujukan 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();

        }

Pengaturcaraan Pelayan Pelanggan

Ketika bekerja dengan pengaturcaraan rangkaian menggunakan TCP, Anda biasanya perlu membuat proses pelayan yang harus dimulai pada port tertentu dan juga proses klien yang dapat dimulai di port mana pun dan mengirim permintaan sambungan ke pelayan. Proses pelayan setelah dimulakan, mendengarkan permintaan sambungan masuk di port tempat ia dimulakan. Coretan kod 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);

Coretan kod berikut menggambarkan bagaimana klien soket anda dapat menyambung ke pelayan 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 menghantar data ke pelayan dari klien, anda boleh menggunakan coretan kod 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

}

Kaedah Receive () dari kelas soket dapat digunakan untuk menerima data. Inilah cara anda menggunakannya untuk mendapatkan data dari soket. Perhatikan bahawa kedua-dua metode Kirim dan Terima sedang menyekat, yaitu, mereka akan menyekat thread yang sedang dijalankan hingga data dikirim atau diterima.

byte[] data = new byte[1024];

int i = socketClient.Receive (data);

Perhatikan bahawa anda harus memasukkan ruang nama System.Net dan System.Net.Sockets dalam program anda untuk berfungsi dengan soket.

using System.Net;

using System.Net.Sockets;