国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

PHP編程實現(xiàn)的TCP服務(wù)端和客戶端功能示例

2024-05-04 21:50:02
字體:
供稿:網(wǎng)友

本文實例講述了PHP編程實現(xiàn)的TCP服務(wù)端和客戶端功能。分享給大家供大家參考,具體如下:

1、修改php.ini,打開extension=php_sockets.dll

2、服務(wù)端程序SocketServer.php

  1. <?php 
  2. //確保在連接客戶端時不會超時 
  3. set_time_limit(0); 
  4. //設(shè)置IP和端口號 
  5. $address = "127.0.0.1"
  6. $port = 3046; 
  7. /** 
  8.  * 創(chuàng)建一個SOCKET 
  9.  * AF_INET=是ipv4 如果用ipv6,則參數(shù)為 AF_INET6 
  10.  * SOCK_STREAM為socket的tcp類型,如果是UDP則使用SOCK_DGRAM 
  11. */ 
  12. $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() fail:" . socket_strerror(socket_last_error()) . "/n"); 
  13. //阻塞模式 
  14. socket_set_block($sockor die("socket_set_block() fail:" . socket_strerror(socket_last_error()) . "/n"); 
  15. //綁定到socket端口 
  16. $result = socket_bind($sock$address$portor die("socket_bind() fail:" . socket_strerror(socket_last_error()) . "/n"); 
  17. //開始監(jiān)聽 
  18. $result = socket_listen($sock, 4) or die("socket_listen() fail:" . socket_strerror(socket_last_error()) . "/n"); 
  19. echo "OK/nBinding the socket on $address:$port ... "
  20. echo "OK/nNow ready to accept connections./nListening on the socket ... /n"
  21. do { // never stop the daemon 
  22.   //它接收連接請求并調(diào)用一個子連接Socket來處理客戶端和服務(wù)器間的信息 
  23.   $msgsock = socket_accept($sockor die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n"); 
  24.   while(1){ 
  25.     //讀取客戶端數(shù)據(jù) 
  26.     echo "Read client data /n"
  27.     //socket_read函數(shù)會一直讀取客戶端數(shù)據(jù),直到遇見/n,/t或者/0字符.PHP腳本把這寫字符看做是輸入的結(jié)束符. 
  28.     $buf = socket_read($msgsock, 8192); 
  29.     echo "Received msg: $buf  /n"
  30.     if($buf == "bye"){ 
  31.       //接收到結(jié)束消息,關(guān)閉連接,等待下一個連接 
  32.       socket_close($msgsock); 
  33.       continue
  34.     } //Vevb.com 
  35.     //數(shù)據(jù)傳送 向客戶端寫入返回結(jié)果 
  36.     $msg = "welcome /n"
  37.     socket_write($msgsock$msgstrlen($msg)) or die("socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n"); 
  38.   } 
  39. while (true); 
  40. socket_close($sock); 
  41. ?> 

3、客戶端程序SocketClient.php

  1. <?php 
  2. set_time_limit(0); 
  3. $host = "127.0.0.1"
  4. $port = 3046; 
  5. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create socket/n"); 
  6. $connection = socket_connect($socket$host$portor die("Could not connet server/n"); 
  7. socket_write($socket"hello socket"or die("Write failed/n"); 
  8. while ($buff = socket_read($socket, 1024, PHP_NORMAL_READ)) { 
  9.   echo("Response was:" . $buff . "/n"); 
  10.   echo("input what you want to say to the server:/n"); 
  11.   $text = fgets(STDIN); 
  12.   socket_write($socket$text); 
  13. socket_close($socket); 
  14. ?> 

4、測試

運行服務(wù)端程序:C:wampbinphpphp5.4.16php.exe C:wampwwwSocketServer.php

運行客戶端程序: C:wampbinphpphp5.4.16php.exe C:wampwwwSocketClient.php

如果遇到

Fatal error: Call to undefined function socket_create()。

1. 找到php.ini,看 extension=php_gd2.dll   和  extension=php_sockets.dll 擴展是否打開;

2. 看phpInfo()顯示的內(nèi)容里,socket模塊是否為enable;

我檢查了一下,發(fā)現(xiàn)都是符合的。但錯誤仍然出現(xiàn)?怎么回事呢?

后來我才發(fā)現(xiàn),原來是我在phpInfo()里看到的和在cmd窗口里使用的php不是同一個東西。

原因是我多次安裝過php. 先前的php在系統(tǒng)的環(huán)境變量里面注冊了path。所以在cmd窗口里使用的是以前的php. 而在phpInfo()里顯示的是現(xiàn)在的php的設(shè)置。

解決的辦法很簡單了,就把系統(tǒng)環(huán)境變量里的path里,指向老的Php的路徑改為指向正在使用的Php的路徑。這樣在cmd里的php和在瀏覽器里的php就是同一個東西了。

就是這樣。

5、其流程與C語言很相似,實際上就是封裝了C語言的socket。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 杭锦后旗| 焉耆| 乡城县| 湖南省| 棋牌| 浦江县| 济南市| 辉南县| 类乌齐县| 清丰县| 体育| 上林县| 荥经县| 榆中县| 威信县| 岳池县| 武隆县| 张家川| 徐闻县| 岳阳县| 湾仔区| 延庆县| 泰州市| 南充市| 陆河县| 炎陵县| 凤凰县| 米易县| 赤水市| 琼结县| 杭锦后旗| 彭泽县| 镇赉县| 盐边县| 肇庆市| 瑞昌市| 仁寿县| 康乐县| 通化县| 三明市| 河源市|