Socket disebut juga dengan “socket”. Aplikasi biasanya mengirimkan permintaan ke jaringan atau merespon permintaan jaringan melalui “socket”, sehingga host atau proses pada suatu komputer dapat berkomunikasi.
Dalam bab ini, kami akan mengajari Anda cara menggunakan layanan Socket dalam bahasa Perl.
Gunakan fungsi soket untuk membuat layanan soket.
Gunakan fungsi ikat untuk mengikat port.
Gunakan fungsi mendengarkan untuk mendengarkan port.
Gunakan fungsi terima untuk menerima permintaan klien.
Gunakan fungsi soket untuk membuat layanan soket.
Gunakan fungsi koneksi untuk terhubung ke server soket.
Diagram berikut menunjukkan proses komunikasi antara klien dan server:
Di Perl, kami menggunakan fungsi socket() untuk membuat soket. Format sintaksnya adalah sebagai berikut:
soket(SOCKET, DOMAIN, JENIS, PROTOKOL);
Analisis parameter:
Soket yang dibuat oleh DOMAIN menentukan kumpulan protokol. Misalnya:
AF_INET
mewakili protokol jaringan IPv4
AF_INET6
berarti IPv6
AF_UNIX
berarti soket lokal (menggunakan file)
JENIS Jenis soket dapat diklasifikasikan sebagai SOCK_STREAM atau SOCK_DGRAM tergantung pada apakah mereka berorientasi koneksi atau non-koneksi
PROTOKOL seharusnya (getprotobyname('tcp'))[2] . Menentukan protokol transport sebenarnya yang digunakan.
Jadi metode pemanggilan fungsi soket adalah sebagai berikut:
gunakan Socket # Tentukan PF_INET dan SOCK_STREAMsocket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]);
Gunakan bind() untuk menetapkan alamat ke soket:
ikat( SOCKET, ALAMAT );
SOCKET Deskriptor soket. ADDRESS adalah alamat soket (TCP/IP) yang mengandung tiga elemen:
Cluster alamat (TCP/IP, adalah AF_INET, mungkin 2 di sistem Anda)
Nomor port (misalnya 21)
Alamat jaringan (mis. 10.12.12.168)
Setelah soket dibuat menggunakan socket(), hanya protokol yang digunakan yang diberikan padanya, dan tidak ada alamat yang ditetapkan. Sebelum menerima koneksi dari host lain, bind() harus dipanggil untuk menetapkan alamat ke soket.
Contoh sederhananya adalah sebagai berikut:
gunakan Socket # PF_INET dan SOCK_STREAM didefinisikan $port = 12345; # Mendengarkan port $server_ip_address = "10.12.12.168";bind( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) atau mati "Tidak dapat mengikat port! N";
atau die dieksekusi setelah kegagalan mengikat alamat.
Setting port dapat langsung digunakan kembali dengan menyetel opsi setockopt() SO_REUSEADDR.
Fungsi pack_sockaddr_in() mengubah alamat menjadi format biner.
Setelah soket terikat ke suatu alamat, fungsi mendengarkan() akan mulai mendengarkan kemungkinan permintaan koneksi. Namun, ini hanya dapat digunakan jika aliran data yang andal terjamin:
mendengarkan(SOCKET, UKURAN ANTRIAN);
SOCKET: Deskriptor soket.
QUEUESIZE: Ini adalah bilangan bulat yang menentukan ukuran antrian mendengarkan. Ketika permintaan koneksi tiba, ia akan memasuki antrian mendengarkan; ketika permintaan koneksi diterima oleh menerima (), itu akan dihapus dari antrian mendengarkan; antrian penuh, koneksi baru Permintaan akan mengembalikan kesalahan.
Setelah koneksi diterima, 0 dikembalikan jika berhasil dan -1 jika terjadi kesalahan.
Fungsi terima() menerima koneksi soket yang diminta. Mengembalikan bentuk terkompresi dari alamat jaringan jika berhasil, jika tidak, mengembalikan FALSE:
terima( NEW_SOCKET, SOCKET );
NEW_SOCKET: Deskriptor soket.
SOCKET: Deskriptor soket.
terima() biasanya digunakan dalam loop tak terbatas:
while(1) { terima( NEW_SOCKET, SOCKT );
Contoh di atas dapat memantau permintaan klien secara real time.
Panggilan sistem connect() menyiapkan koneksi untuk soket. Parameternya adalah deskriptor file dan alamat host.
menghubungkan (SOKET, ALAMAT);
Berikut ini membuat sebuah instance yang terhubung ke soket server:
$port = 21; # ftp port $server_ip_address = "10.12.12.168"; sambungkan( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) atau mati "Tidak dapat mengikat port! n";
Selanjutnya, kita menggunakan contoh lengkap untuk memahami penerapan semua fungsi soket:
Kode server server.pl:
Buka terminal dan jalankan kode berikut:
$ perl server.pl akses mulai: 7890
Kode klien client.pl:
Buka terminal lain dan jalankan kode berikut:
$ perl client.plSaya adalah informasi dari server