1. Delphi dan Soket
Jaringan komputer terdiri dari serangkaian protokol komunikasi jaringan, protokol intinya adalah protokol TCP/ip dan UDP pada lapisan transport. TCP berorientasi pada koneksi, dan kedua pihak yang berkomunikasi mempertahankan jalurnya, seperti saluran telepon saat ini. Jika Anda menggunakan telnet untuk masuk ke BBS, protokol TCP digunakan tanpa koneksi, dan pihak yang berkomunikasi tidak memelihara masing-masing status orang lain. Ini digunakan ketika browser mengakses Internet. Protokol HTTP didasarkan pada protokol UDP. Baik protokol TCP maupun UDP sangat kompleks, terutama protokol TCP Untuk memastikan kebenaran dan efektivitas transmisi jaringan, serangkaian proses koreksi kesalahan dan penyortiran yang kompleks harus dilakukan.
Soket adalah spesifikasi soket berdasarkan protokol lapisan transport (terutama TCP dan UDP). Awalnya diusulkan oleh University of California, Berkeley, yang mendefinisikan spesifikasi untuk komunikasi antara dua komputer (juga spesifikasi pemrograman). sebuah "saluran", maka kedua ujung "saluran" ini adalah dua soket. Soket melindungi perbedaan antara perangkat lunak komunikasi yang mendasarinya dan sistem operasi tertentu, sehingga memungkinkan komunikasi antara dua komputer mana pun yang telah menginstal perangkat lunak protokol TCP dan menerapkan spesifikasi soket.
Spesifikasi Socket Windows Microsoft (singkatnya winsock) memperluas spesifikasi soket Berkeley. Dengan menggunakan metode Socket standar, Anda dapat berkomunikasi dengan Sockets pada platform apa pun menggunakan ekstensinya, Anda dapat mengimplementasikannya dengan lebih efektif pada platform Windows. Di Delphi, Socket yang mendasarinya juga harus berupa Socket Windows. Socket mengurangi kesulitan penulisan perangkat lunak komunikasi antar komputer, namun secara umum masih cukup rumit (ini akan dibahas secara rinci nanti); InPRise secara efektif merangkum Windows Socket di Delphi, memungkinkan pengguna menulis program komunikasi jaringan dengan mudah. Di bawah ini kami jelaskan dengan contoh bagaimana menggunakan Socket untuk menulis program komunikasi di Delphi.
2. Gunakan Delphi untuk menulis program komunikasi Socket.
Berikut ini adalah program komunikasi Socket sederhana, di mana klien dan server adalah program yang sama. Ketika klien (server) memasukkan sepotong teks di memo1 dan menekan Enter, teks tersebut dapat ditampilkan di server (klien) ) di. memo2, hal sebaliknya juga terjadi. Langkah-langkah spesifiknya adalah sebagai berikut:
1. Buat formulir baru dan beri nama secara sewenang-wenang. Anda sebaiknya mengaturnya sebagai chatForm; tempatkan MainMenu (di kolom Standar) dan buat item menu ListenItem, ConnectItem, Disconnect dan Exit, pilih TServerSocket dan TClientSocket dari kolom Internet dan tambahkan mereka ke chatForm , di mana nama TClientSocket disetel ke ClientSocket, Atur port ke 1025, default aktif adalah false; atur nama TServerSocket ke ServerSocket, atur port ke 1025, default aktif adalah false, dan biarkan yang lain tidak berubah lalu masukkan dua memo, satu bernama memo1, dan other Untuk memo2, warna memo2 diatur ke abu-abu karena ini terutama digunakan untuk menampilkan masukan pihak lain. Di bawah ini kami menjelaskan alasannya saat menulis kode.
2. Klik dua kali ListItem. Tulis kode berikut:
prosedur TChatForm.ListenItemClick(Pengirim: TObject);
mulai
ListenItem.Checked := bukan ListenItem.Checked;
jika ListenItem.Diperiksa kemudian
mulai
ClientSocket.Aktif := Salah;
ServerSocket.Aktif := Benar;
akhir
kalau tidak
mulai
jika ServerSocket.Aktif maka
ServerSocket.Aktif := Salah;
akhir;
akhir;
Deskripsi segmen program ini adalah sebagai berikut: Ketika pengguna memilih ListemItem, ListenItem dibalik. Jika dipilih berarti dalam keadaan Listen. Yang perlu dipahami pembaca adalah: mendengarkan adalah metode kepemilikan saat Socket melayani sebagai Server. Jika sedang mendengarkan, maka ServerSocket diatur ke keadaan aktif; jika tidak, mendengarkan dibatalkan dan ServerSocket ditutup. Faktanya, hanya pengguna yang awalnya memilih item menu ini, yang menunjukkan bahwa program tersebut bertindak sebagai server. Sebaliknya, jika pengguna memilih ConnectItem, maka harus digunakan sebagai Klien.
3. Klik dua kali ConnectItem dan masukkan kode berikut.
prosedur TChatForm.ConnectItemClick(Pengirim: TObject);
mulai
jika ClientSocket.Active maka ClientSocket.Active := False;
if InputQuery('Komputer yang akan dihubungkan', 'Nama Alamat:', Server) lalu
jika Panjang(Server) > 0 maka
dengan ClientSocket lakukan
mulai
Tuan rumah := Server;
Aktif := Benar;
ListenItem.Diperiksa := Salah;
akhir;
akhir;
Fungsi utama program ini adalah untuk mengatur aplikasi sebagai klien ketika pengguna memilih item menu ConnectItem, dan kotak input muncul untuk memungkinkan pengguna memasukkan alamat server. Inilah sebabnya kami tidak memperbaiki host ClientSocket di awal, sehingga pengguna dapat terhubung secara dinamis ke server yang berbeda. Yang perlu dipahami pembaca adalah bahwa alamat host hanyalah atribut yang dimiliki Socket ketika ia menjadi klien. Ketika Socket adalah server, "umumnya" tidak menggunakan alamat tersebut karena terikat pada mesin lokal.
4. Tulis kode berikut dalam metode keydown memo1:
procedure TChatForm.Memo1KeyDown(Pengirim: TObject; var Key: Word;
Pergeseran: TShiftState);
mulai
jika Kunci = VK_Kembalikan maka
jika IsServer maka
ServerSocket.Socket.Koneksi[0].SendText(Memo1.Lines[Memo1.Lines.Count - 1])
kalau tidak
ClientSocket.Socket.SendText(Memo1.Lines[Memo1.Lines.Count - 1]);
akhir;
Fungsi kode ini jelas, yaitu mulai mengirim pesan. Jika itu adalah Server, ia hanya mengirimkan pesan ke klien pertama. Karena server dapat terhubung ke beberapa klien, dan setiap koneksi dengan klien dikelola oleh Socket, maka array ServerSocket.Socket.Connections Yang disimpan adalah Socket. yang memelihara koneksi dengan Klien. Dalam Socket standar, Socket sisi server memperoleh Socket yang memelihara koneksi dengan klien melalui nilai kembalian metode terima(), dan metode untuk mengirim dan menerima pesan masing-masing adalah send(sendto) dan recv(recvfrom) . Delphi telah melakukan Enkapsulasi ini.
5. Pengenalan singkat tentang kode-kode lainnya.
prosedur TChatForm.ServerSocketAccept(Pengirim: TObject;
Soket: TCustomWinSocket);
mulai
IsServer := Benar;
akhir;
Metode Accept ServerSocket selesai ketika klien terhubung untuk pertama kalinya. Dari parameternya, dapat dianggap dijalankan setelah metode penerimaan standar. Karena ada tipe parameter TCustomWinSocket, itu harus menjadi nilai kembalian Soket sisi Server standar.
prosedur TChatForm.ClientSocketRead(Pengirim: TObject;
Soket: TCustomWinSocket);
mulai
Memo2.Lines.Add(Socket.ReceiveText);
akhir;
prosedur TChatForm.ServerSocketClientRead(Pengirim: TObject;
Soket: TCustomWinSocket);
mulai
Memo2.Lines.Add(Socket.ReceiveText);
akhir;
Kedua potongan kode ini dipicu oleh Delphi ketika sisi server dan sisi klien saling menerima pesan, dan fungsinya untuk menampilkan pesan yang diterima di memo2. Diantaranya, Socket di ClientSocketRead sebenarnya adalah Socket itu sendiri, dan Socket di ServerSocketClientRead sebenarnya adalah Socket di ServerSocket.Socket.Connection[]. Namun, di Delphi, Socket sisi server dienkapsulasi secara efektif.
prosedur TChatForm.ServerSocketClientConnect(Pengirim: TObject;
Soket: TCustomWinSocket);
mulai
Memo2.Garis.Hapus;
akhir;
prosedur TChatForm.ClientSocketDisconnect(Pengirim: TObject;
Soket: TCustomWinSocket);
mulai
ListenItemClick(nihil);
akhir;
Kedua paragraf ini relatif sederhana. Diantaranya, ServerSocketClientConnect dipicu ketika ServerSocket menerima koneksi baru. ClientSocketDisconnect dipicu ketika ClientSocket mengeluarkan Disconncet.
prosedur TChatForm.Exit1Click(Pengirim: TObject);
mulai
ServerSocket.Tutup;
ClientSocket.Tutup;
Menutup;
akhir;
prosedur TChatForm.Disconnect1Click(Pengirim: TObject);
mulai
ClientSocket.Aktif := Salah;
ServerSocket.Aktif := Benar;
akhir;
Paragraf pertama adalah menutup aplikasi. Dalam Socket standar, ketika setiap Socket ditutup, metode closesocket() harus dipanggil, jika tidak, sistem tidak akan melepaskan sumber daya. Di ServerSockt.Close dan ClientSocket.Close, metode closesocket() harus dipanggil secara internal di sistem.
3. Soket Standar dan Soket di Delphi.
Kerangka kerja aplikasi Socket standar adalah sebagai berikut:
Sisi server: Socket()[Buat Socket baru]--Bind()[Ikat dengan alamat server]--Listen()--Accept()--block wait--read()[Terima pesan, di windows platform , metodenya adalah kirim(TCP), atau sendto(UDP)]--proses permintaan layanan--Write()[kirim pesan, di platform Windows, metodenya adalah kirim(TCP), Atau kirim ke (UDP).
Sisi klien relatif sederhana: Socket()--Connect() [Menghubungkan ke server tertentu melalui port tertentu, yaitu untuk membuat koneksi dengan server]--Write()--Read().
Socket dapat didasarkan pada TCP atau UDP, dan Socket bahkan dibangun pada protokol lain, seperti IPX/SPX, DECNet, dll. Saat membuat Socket baru, Anda dapat menentukan jenis Socket apa yang akan dibuat. Bind() digunakan untuk mengikat ke alamat server. Jika sebuah host hanya memiliki satu alamat IP, peran pengikatan sebenarnya relatif berlebihan. Listen() mulai memantau jaringan, Accept() digunakan untuk menerima koneksi, dan nilai kembaliannya adalah Socket yang memelihara kontak dengan klien.
Di Delphi, Socket di Windows dienkapsulasi secara efektif. Di Delphi, menurut hubungan pewarisannya, mereka dapat dibagi menjadi dua kategori:
1. TComponent--TAbstractSocket--TCustomSocket--TCustomServerSocket--TServerSocket
TComponent--TAbstractSocket--TCustomSocket--TClientSocket
2. Mewarisi langsung dari TObject:
TObject--TCustomWinSocket--TServerWinSocket
TObject--TCustomWinSocket--TClientWinSocket
TObject--TCustomWinSocket--TServerClientWinSocket
Terlihat bahwa tipe pertama berbasis TCustomSocket, dan tipe kedua berbasis TCustomWinSocket. Tipe pertama dibangun di TComponet, dan tipe kedua dibangun langsung di TObject. Oleh karena itu, jika pengguna sangat familiar dengan Socket dan ingin menulis program konsol, dia dapat menggunakan kelas TCustomWinScoket.
Seperti dapat dilihat dari penggunaan yang sama, semuanya diimplementasikan di ScktComp.pas, dan schtComp.pas berisi file winock.pas. Jika Anda terus mempelajari file winock, Anda dapat menemukan semua metode dasar Windows Socket.
Faktanya, jika Anda memahami kerangka aplikasi Socket standar, Anda akan nyaman menggunakan Delphi untuk menulis aplikasi Socket; ini tidak berarti Anda harus memahami fungsi standar dalam Socket yang kompleks, dan itu tidak perlu, karena Delphi sudah melakukannya untuk Anda. Ini dikemas dengan baik, yang merupakan kekuatan Delphi. Anda hanya perlu memahami sedikit kerangka dasarnya.
Demikian pemahaman saya tentang aplikasi Socket di Delphi. Saya harap anda dapat mengoreksi saya jika saya mempunyai kekurangan. Pada saat yang sama, saya juga dengan senang hati menjawab pertanyaan tentang Socket di Delphi.