程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP的socket連接到服務端模版,socket服務端

PHP的socket連接到服務端模版,socket服務端

編輯:關於PHP編程

PHP的socket連接到服務端模版,socket服務端


在整理新框架的時候,發現對於一些緩存數據,需要對外的接口訪問,而比較方便的是php的接口,所以臨時研究了下php如何連接java服務端。

先貼上代碼:
  1. <?php
  2. require_once 'CRC16.php';
  3. /*-----------------------------
  4. | 向服務器發送數據包
  5. ------------------------------*/
  6. classServer{
  7. //發送數據包
  8. publicstaticfunction sendPacket($packet, $host, $port){
  9. $protocol ='tcp';
  10. $get_prot = getprotobyname ( $protocol );
  11. //創建socket
  12. $socket = socket_create ( AF_INET, SOCK_STREAM, $get_prot );
  13. //建立連接
  14. $conn = socket_connect ( $socket, $host, $port );
  15. if(!$conn){
  16. socket_close($socket);
  17. exit("socket connect failed!");
  18. }
  19. $buffer =@socket_read($socket,9, PHP_NORMAL_READ);
  20. $crcCode =(ord($buffer[7])<<8)+ord($buffer[8]);
  21. $len = strlen($packet);
  22. $newpacket = CRC16::encode($packet, $crcCode,4);
  23. socket_send ( $socket, $newpacket, $len,0);
  24. //等待接受
  25. $head =@socket_read($socket,4,PHP_NORMAL_READ);
  26. $len =(ord($head[0])<<24)+(ord($head[1])<<16)+(ord($head[2])<<8)+ord($head[3]);
  27. $content =@socket_read($socket,$len-4,PHP_NORMAL_READ);
  28. socket_close ( $socket );
  29. return substr($content,3);
  30. }
  31. publicstaticfunction packet($group,$cmd,$message){
  32. $size = strlen($message)+8;
  33. $str ='';
  34. $str .=self::writeInt($size);
  35. $str .=self::writeByte(0);
  36. $str .=self::writeByte($group);
  37. $str .=self::writeByte($cmd);
  38. $str .=self::writeByte(1);
  39. $str .= $message;
  40. return $str;
  41. }
  42. //寫進2個byte的數據
  43. privatestaticfunction writeShort($s){
  44. return pack ("n", $s );
  45. }
  46. //寫進4個byte的數據
  47. privatestaticfunction writeInt($N){
  48. return pack ("N", $N );
  49. }
  50. //寫進1個byte的數據
  51. privatestaticfunction writeByte($b){
  52. return pack ("c", $b );
  53. }
  54. }
因為個人服務端連接之後,會分配一個crcCode校驗碼,發送的消息需要進行crc16的加密(其實很簡單的,保持點神秘感),所以先等待接受固定長度來獲得crcCode,然後發送請求後,等待接受數據包,並返回。



來自為知筆記(Wiz)




PHP的Socket怎進行服務端與客戶端的相互通信?

服務器提供數據緩沖區,並提供一種用戶識別機制。以此來給聊天用戶雙方發送相應的信息。
看似用戶與用戶之間的通信實質上是用戶在與服務器通信。
我的一點理解
 

php socket連接不上

查一下端口把
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved