Rumah >pembangunan bahagian belakang >masalah PHP >Bolehkah php melaksanakan komunikasi soket?

Bolehkah php melaksanakan komunikasi soket?

藏色散人
藏色散人asal
2023-02-09 10:09:053610semak imbas

php boleh melaksanakan komunikasi soket Kaedah pelaksanaannya ialah: 1. Buat "socketsocket_create();" pada klien dan minta sambungan ke pelayan "socket_connect();" 2. Buat "socketsocket_create() " pada pelayan ;" dan mengikat nombor IP dan port "socket_bind();";

Bolehkah php melaksanakan komunikasi soket?

Persekitaran pengendalian tutorial ini: sistem Windows 10, PHP versi 8.1, komputer DELL G3

Bolehkah php mencapai komunikasi soket ?

soket PHP: Pelaksanaan PHP komunikasi TCP soket yang terperinci dan ringkas

1 Pengenalan latar belakang

Matlamat: Saya berharap untuk menggunakan soket Fungsi pelayan ini adalah untuk menerima sambungan daripada berbilang pelanggan dan melengkapkan komunikasi bersama mereka. Sebagai contoh, klien A dan klien B disambungkan ke pelayan S pada masa yang sama Klien A menghantar mesej ke pelayan S. Pelayan S akan memajukan mesej A kepada B. Begitu juga, mesej B juga boleh dimajukan kepada A melalui S. Dengan cara ini, komunikasi bersama antara klien A dan klien B tercapai. Kali ini kami hanya melaksanakan sambungan dan komunikasi antara klien dan pelayan, dan tidak mempunyai fungsi pemajuan pelayan buat masa ini.

2 Pengenalan ringkas kepada TCP

2.1 "jabat tangan tiga hala" TCP

Jam tangan tiga hala TCP boleh memastikan pelayan dan Pelanggan boleh berkomunikasi secara normal. Proses jabat tangan tiga hala: Bagi penjelasan proses ini, anda boleh klik pada pautan di bawah untuk melihatnya.


Bolehkah php melaksanakan komunikasi soket? Rujukan: https://www.php.cn/link/70203474234c15a59de1eacc053f5690

2.2 IP dan PORT Bahagian perkhidmatan pelanggan perlu mempunyai IP, dan apabila berkomunikasi dengan TCP, ia juga perlu memberikan nombor port.


Pemahaman peribadi: IP ialah alamat, yang boleh difahami sebagai rumah Apabila anda perlu mewujudkan komunikasi, anda mesti tahu di mana rumah itu berada.

Port port, nombor port boleh difahami sebagai pintu di rumah ini. Kita perlu menentukan pintu untuk menghantar mesej masuk atau menerima mesej dari pintu ini.


2.2 Proses komunikasi ringkas antara klien dan pelayan

2.2.1 Beberapa fungsi berkaitan phpPelanggan:

Buat soket
    socket_create();
  1. Minta sambungan daripada pelayan
  2. socket_connect();
  3. Hantar mesej ke pelayan /Terima mesej pelayan
  4. socket_wirte(); / socket_read();
  5. Tutup soket
  6. socket_close();
  7. Pelayan :

    Buat soket
  • socket_create();

  • Ikat nombor IP dan port
  • socket_bind();

  • Mendengar IP dan nombor port (0.0.0.0 bermaksud mana-mana IP)
  • socket_listen();

  • Menyekat dan menunggu perkhidmatan pelanggan Tamatkan sambungan
  • socket_accept();

  • Baca mesej/tulis mesej klien kepada klien
  • socket_wirte();

  • Tutup soket
  • soket_tutup();

2.2.2 Proses komunikasi ringkas
Pelayan mencipta soket, mengikat IP dan PORT, dan kemudian memasuki keadaan mendengar untuk menunggu klien memulakan sambungan.
    Pelanggan mencipta soket dan menyambung ke IP pelayan dan PORT yang ditentukan.
  • Pelayan menerima sambungan yang dimulakan oleh klien.
  • Kedua-dua pihak boleh menghantar data antara satu sama lain
  • Kedua-dua pihak menutup soket.
ABBuat soketBuat soket , tetapkan untuk membenarkan akses kepada IP dan PORTDengar IP tertentu (atau semua) dan port tertentu, dan masukkan penyekatan menunggu klien Mulakan connet ke IP/PORT pelayan yang ditentukanTerima connet daripada klien A Kedua-dua pihak telah mewujudkan hubunganHantar mesejHantar mesejSelepas komunikasi tamat , A dan B bersetuju >B

Ini adalah proses komunikasi ringkas Bagi penghantaran kitaran atau pengesanan kelainan, ia adalah beberapa butiran.

3 Mula berlatih

3.1 pemasangan PHP dan konfigurasi persekitaran

  1. Pasang PHP . Di sini saya memasang XAMPP secara langsung, dan perisian ini memasang PHP untuk saya sendiri. Jika ini kali pertama anda menggunakan bahasa PHP, anda boleh memasang PHP terus dari Baidu, atau anda boleh memasang XAMPP.
  2. Konfigurasi persekitaran sistem. Semasa menjalankan program, saya menjalankannya melalui cmd, jadi saya perlu mengkonfigurasi pembolehubah persekitaran sistem. Untuk proses konfigurasi, sila rujuk: Pautan: konfigurasi pembolehubah persekitaran PHP .
  3. Semak sama ada arahan php boleh dijalankan. Selepas melengkapkan langkah 1 dan 2, jalankan cmd dan laksanakan arahan php -v Selepas operasi selesai, nombor versi PHP akan dipaparkan. Bolehkah php melaksanakan komunikasi soket?

3.2 Program pelanggan

3.2.1 Program penulisan
  1. Buat yang baharu satu Folder soket, buat dokumen teks baharu di bawah folder ini dan namakan semula client.php NOTA: Folder saya dicipta pada desktop
  2. Buka client.php NOTA: Jika anda tidak mempunyai editor php, anda boleh terus membuka client.php dengan Notepad pada masa ini
  3. dan tulis Prosedur NOTA: Saya akan memberikan prosedur terus di sini dan memberi komen Anda boleh memahaminya berdasarkan proses komunikasi 2.2 Jika anda mempunyai sebarang pertanyaan, sila tinggalkan mesej
<?php
$PORT = 请输入端口号; //端口号请查看博文:*3.2.2 程序执行*。设置有效端口:
$client = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //创建socket/参数1:代表IPV4/参数2:流传输/参数3:TCP/
$result = socket_connect($client, "122.114.122.174", $PORT); //向指定地址/端口发出连接请求,连接结果返回到resule
if($result == false){  //这里我们简单的对连接结果进行响应/为了Debug方便
    echo "ERROR CONNECT\n"; 
    die();
} else {
    echo "CONNECTED\n";
}
$data = "Hello World\n"; //建立将要发送的消息
socket_write($client, $data); //将消息发送出去
socket_close($client); //关闭socket
?>
  1. Selepas atur cara ditulis, anda boleh menyalinnya terus, atau muat turun terus. NOTA: Jika program dijalankan secara langsung, ralat akan dilaporkan Kami perlu menentukan nombor port Sila teruskan ke bahagian seterusnya untuk mengetahui cara menjalankan program.
3.2.2 Pelaksanaan program
  1. Dapatkan program . Melalui bahagian sebelumnya, kami sudah mempunyai program klien yang mudah, sila klik untuk memuat turun.
  2. Cari port yang sah . Oleh kerana kami tidak mempunyai pelayan sekarang, kami perlu menggunakan alamat pelayan dan port yang disediakan oleh orang lain untuk penyahpepijatan.
    Langkah operasi:
    1.Klik di sini untuk membuka halaman web
    2. Cari di bahagian bawah halaman: 122.114.122.174:xxxxx
    3. Gantikan bahagian xxxxx kepada baris kedua dalam program dan simpan
    Operasi halaman web:
    Bolehkah php melaksanakan komunikasi soket?
    Operasi program:
    Bolehkah php melaksanakan komunikasi soket?
  3. Buka cmd. Jika pembolehubah persekitaran PHP tidak dikonfigurasikan, sila semak: 3.1 pemasangan PHP dan konfigurasi persekitaran
  4. Jalankan arahan cd desktop/socket. Tujuannya adalah untuk pergi ke folder soket dan mengisi laluan yang berkaitan mengikut lokasi folder anda sendiri.
  5. Laksanakan program pelanggan php client.php. Jika ralat PHP Fatal dilaporkan pada masa ini, sila semak Klik untuk melihat penyelesaian
    Bolehkah php melaksanakan komunikasi soket?
    Akhirnya, kita dapat melihat bahawa maklumat telah diterima dalam halaman web.
    NOTA: Selepas melaksanakan program, jika CONNECTED tidak dicetak, tunggu sebentar dan dapatkan ERROR CONNET dikembalikan. Ini kerana nombor port kami telah tamat tempoh (hanya boleh digunakan selama 3 minit hanya kembali ke halaman web untuk memuat semula dan mengubah suainya ke dalam program ). Jika ia tidak dapat dijalankan dengan betul, sila tinggalkan mesej !

3.3 Pelayan tempatan dan program klien

Jika anda tidak Tidak mahu menaip sendiri, Sila klik di sini untuk memuat turun dan lompat ke: 3.3.3 Pelaksanaan program.

3.3.1 写程序/服务器
  1. 新建一个文件夹socket(如有,请忽略),在该文件夹下新建文本文档并改名为server.php NOTE:我的文件夹建在桌面上
  2. 打开server.php NOTE:如果你平时没有php的编辑器,这个时候可以直接用记事本打开server.php
  3. 写入程序 NOTE:程序我这里直接给出,并给予注释,大家可以结合2.2通信过程进行理解,如有疑问请留言
<?php
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //创建socket/参数解释同客服端
socket_bind($server, "0.0.0.0", 12345); //绑定端口和IP/0.0.0.0表示允许任意地址发起连接/12345表示允许12345端口号进行连接
socket_listen($server); //进入监听
$connection = socket_accept($server); //接受请求并建立连接
$data = socket_read($connection, 1024); //接受数据
echo $data; //打印数据
socket_close($server);//关闭socket
?>
3.3.2 写程序/客户端
  1. 打开文件夹socket(server.php所在文件夹),在该文件夹下新建文本文档并改名为client.php(如有,请打开直接修改程序即可) NOTE:我的文件夹建在桌面上
  2. 打开client.php NOTE:如果你平时没有php的编辑器,这个时候可以直接用记事本打开client.php
  3. 写入程序 NOTE:程序我这里直接给出,并给予注释,大家可以结合2.2通信过程进行理解,如有疑问请留言
<?php
$PORT = 12345; //与server端口匹配
$client = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //创建socket/参数1:代表IPV4/参数2:流传输/参数3:TCP/
$result = socket_connect($client, "127.0.0.1", $PORT); //向指定地址/端口发出连接请求,连接结果返回到resule/127.0.0.1指本地IP
if($result == false){  //这里我们简单的对连接结果进行响应/为了Debug方便
    echo "ERROR CONNECT\n"; 
    die();
} else {
    echo "CONNECTED\n";
}
$data = "Hello World\n"; //建立将要发送的消息
socket_write($client, $data); //将消息发送出去
socket_close($client); //关闭socket
?>
3.3.3 程序执行
  1. 获取程序。通过上节,我们已经有一个本地客服端程序和一个服务器程序,下载请点击
  2. 打开cmd。如果没有配置PHP的环境变量请查看:3.1
  3. 执行命令cd desktop/socket。注意:这个路径需要根据自己实际情况填写,直接下载的应该是cd desktop/simple-socket-php/local-client-server主要目的是为了找到server.php所在的文件夹,根据自己文件夹位置填写相应路径。
  4. 执行服务器程序php server.php。我们发现cmd卡住了,这个时候在等待客户端连接进来。这个时候如果报错PHP Fatal error,请查看点击查看解决方法(如果想强制退出进程按下Ctrl+C
    Bolehkah php melaksanakan komunikasi soket?
  5. 再打开一个cmd
  6. 执行命令cd desktop/socket。注意:这个路径需要根据自己实际情况填写,直接下载的应该是cd desktop/simple-socket-php/local-client-server主要目的是为了找到client.php所在的文件夹,根据自己文件夹位置填写相应路径。
  7. 执行客户端程序php client.php。(如果想强制退出进程按下Ctrl+C
    Bolehkah php melaksanakan komunikasi soket?
    如果服务器没有反应,请按下Ctrl+C结束进程,重新按照顺序(先在一个CMD执行server.php,再在另一个CMD执行client.php)执行程序。如有疑问,请留言。

4 结束

到这里,我们已经实现了基本的socket通信,当然,这个程序是完全不能实际应用的,如果想要实际应用,需要增加很多细节方面的东西,有一个做的比较好的Workerman,大家可以自行搜索。
之后我会更新如何把这个server.php在自己的阿里云服务器上面运行,这样,我们就可以随时连接进去实现客服端的相互通信了。如果有兴趣可以关注等待。

推荐学习:《PHP视频教程

Atas ialah kandungan terperinci Bolehkah php melaksanakan komunikasi soket?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn