Mari kita mulai dengan contoh sederhana - layanan TCP yang menerima string input, memproses dan mengembalikan string ini ke klien. Berikut adalah kode yang sesuai:
Kode PHP:
<?
// 设置一些基本的变量
$host = "192.168.1.99" ;
$port = 1234 ;
// 设置超时时间
set_time_limit ( 0 );
// 创建一个Socket
$socket = socket_create ( AF_INET , SOCK_STREAM , 0 ) or die( "Could not create
socketn" );
//绑定Socket到端口
$result = socket_bind ( $socket , $host , $port ) or die( "Could not bind to
socketn" );
// 开始监听链接
$result = socket_listen ( $socket , 3 ) or die( "Could not set up socket
listenern" );
// accept incoming connections
// 另一个Socket来处理通信
$spawn = socket_accept ( $socket ) or die( "Could not accept incoming
connectionn" );
// 获得客户端的输入
$input = socket_read ( $spawn , 1024 ) or die( "Could not read inputn" );
// 清空输入字符串
$input = trim ( $input );
//处理客户端输入并返回结果
$output = strrev ( $input ) . "n" ;
socket_write ( $spawn , $output , strlen ( $output )) or die( "Could not write
outputn" );
// 关闭sockets
socket_close ( $spawn );
socket_close ( $socket );
?>
Berikut penjelasan detail setiap langkahnya:
1. Langkah pertama adalah membuat dua variabel untuk menyimpan alamat IP dan port server tempat Socket berjalan. Anda dapat mengaturnya ke server dan port Anda sendiri (port ini dapat berupa angka antara 1 dan 65535), asalkan bahwa port ini Tidak digunakan.
Kode PHP:
<?
// 设置两个变量
$host = "192.168.1.99" ;
$port = 1234 ;
?>
2. Anda dapat menggunakan fungsi set_time_out() di sisi server untuk memastikan bahwa PHP tidak kehabisan waktu saat menunggu klien terhubung.
Kode PHP:
<?
// 超时时间
set_time_limit ( 0 );
?>
3. Berdasarkan penjelasan sebelumnya, sekarang saatnya membuat Socket menggunakan fungsi socket_creat()---fungsi ini mengembalikan handle Socket, yang akan digunakan di semua fungsi selanjutnya.
Kode PHP:
<?
// 创建Socket
$socket = socket_create ( AF_INET , SOCK_STREAM , 0 ) or die( "Could not create socketn" );
?>
Parameter pertama "AF_INET" digunakan untuk menentukan nama domain;
Parameter kedua "SOCK_STREM" memberi tahu fungsi tipe Socket apa yang akan dibuat (tipe TCP dalam contoh ini)
Oleh karena itu, jika Anda ingin membuat Socket UDP, Anda dapat menggunakan kode berikut:
Kode PHP:
<?
// 创建socket
$socket = socket_create ( AF_INET , SOCK_DGRAM , 0 ) or die( "Could not create socketn" );
?>
4. Setelah pegangan Socket dibuat, langkah selanjutnya adalah menentukan atau mengikatnya ke alamat dan port yang ditentukan. Ini dapat dilakukan melalui fungsi socket_bind().
Kode PHP:
<?
// 绑定socket to 指定地址和端口
$result = socket_bind ( $socket , $host , $port ) or die( "Could not bind to socketn" );
?>
5. Setelah Socket dibuat dan diikat ke port, Anda dapat mulai mendengarkan koneksi eksternal. PHP memungkinkan Anda untuk mulai mendengarkan melalui fungsi socket_listen(), dan Anda dapat menentukan nomor (dalam contoh ini yang kedua parameter: 3)
Kode PHP:
<?
// 开始监听连接
$result = socket_listen ( $socket , 3 ) or die( "Could not set up socket listenern" );
?>
6. Sampai saat ini, server Anda pada dasarnya tidak melakukan apa pun kecuali menunggu permintaan koneksi dari klien. Setelah koneksi klien diterima, fungsi socket_assept() mulai bekerja. Socket menangani informasi klien-server.
Kode PHP:
<?
//接受请求链接
// 调用子socket 处理信息
$spawn = socket_accept ( $socket ) or die( "Could not accept incoming connectionn" );
?>
Subsoket ini sekarang dapat digunakan untuk komunikasi klien-server selanjutnya.
7. Ketika koneksi dibuat, server akan menunggu klien mengirimkan beberapa informasi masukan. Informasi ini dapat diperoleh dengan fungsi socket_read() dan ditugaskan ke variabel $input PHP.
Kode PHP:
<?
// 读取客户端输入
$input = socket_read ( $spawn , 1024 ) or die( "Could not read inputn" );
?>
Parameter kedua socker_read digunakan untuk menentukan jumlah byte yang akan dibaca. Anda dapat menggunakannya untuk membatasi ukuran data yang diperoleh dari klien.
Catatan: Fungsi socket_read akan terus membaca data klien shell hingga menemukan karakter n, t atau .
8. Sekarang server harus memproses data yang dikirim oleh klien (dalam contoh ini, pemrosesan hanya mencakup input dan pengembalian data ke klien). Bagian ini dapat diselesaikan dengan fungsi socket_write() (agar data terkirim oleh soket komunikasi Dimungkinkan untuk mengembalikan aliran data ke klien)
Kode PHP:
<?
// 处理客户端输入并返回数据
$output = strrev ( $input ) . "n" ;
socket_write ( $spawn , $output , strlen ( $output )) or die( "Could not write outputn" );
?>
9. Setelah output dikembalikan ke klien, soket induk/anak harus diakhiri melalui fungsi socket_close()
Kode PHP:
<?
// 关闭sockets
socket_close ( $spawn );
socket_close ( $socket );
?>