• socket编程 (PHP实现)


    在一个星期前PHP已经完工了这个程序一直没有时间写博客。今天把这个程序放上来,在网上用PHP实现的socket也不多。所以放上自己写的程序,希望能给需要的人提供一些帮助。自学PHP程序没多久若有漏洞与不足请多多谅解!

    功能:主要是提供登录功能,成绩查询功能,登出功能三种

    程序主体:分三大块

    •Index.php(登录界面)
    •Client.php (客户界面)
    +request.php(函数)
    •Server.php (服务器界面)
    +response.php (函数)
    +conn.php(数据库连接)
    用的是TCP, 由于PHP本身不支持多线程所以只实现了客户服务器一对一。服务端由一个变量记录了当前用户。
    通信过程:
    在客户端请求通信时现发送一个字符串至服务端,服务端有字符串得知需要提供的服务并转入相应的分支。
    具体代码如下:
     
      1 <?php
      2 //index.php
      3 //write for 张小豪
      4     if (isset($_COOKIE["user"]) && $_COOKIE["user"]){
      5 ?>
      6         <script>
      7             location.href="../socket/client.php?user=<?php echo $_COOKIE["user"]; ?>";
      8         </script>
      9 <?php
     10     }
     11 ?>
     12 <html>
     13 <meta charset="UTF-8">
     14 <head>
     15     <title>登陆界面</title>
     16     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
     17 </head>
     18 
     19 </body>
     20 <SCRIPT language=javascript>
     21 
     22 function CheckPost()
     23 {
     24     //var username=document.getElementById("username");
     25     //alert(username.innerHTML);
     26     if(submitpage.username.value=="")
     27     {
     28         alert("请填写用户名!");
     29         //submit.user.focus();
     30         return false;
     31     }
     32     if(submitpage.password.value=="")
     33     {
     34         alert("请填写密码!");
     35         //submit.user.focus();
     36         return false;
     37     }
     38 }
     39  
     40 </SCRIPT>
     41 
     42 <h3><center>客户端登录</center></h3>
     43 <form action = "index.php" name = "submitpage" method = "post" onsubmit="return CheckPost();">
     44     <center>
     45         <p>用户名:<input type = "text" id="username" name = "username" size = "20"></p>
     46         <p>密码:&nbsp; <input type = "password" name = "password" size = "20"></p>
     47         <input type = "submit" name = "submit" value = "提交">
     48     </center>
     49 </form>
     50 <?php
     51     set_time_limit(0);
     52      
     53     $host = "127.0.0.1";
     54     $port = 8890;
     55     if(@$_POST['submit']){
     56         $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create    socket
    "); // 创建一个Socket
     57              
     58         $connection = socket_connect($socket, $host, $port) or die("Could not connet server
    ");    //  连接
     59             
     60         socket_write($socket, "login
    ") or die("Write failed
    ");                //通知服务器已经登陆
     61         socket_write($socket, $_POST['username']) or die("Write failed
    "); // 将用户名发送到服务器
     62              
     63         if ($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)) {
     64             //echo("Username sent was: time
    Password was:" . $buffer . "
    ");
     65         }
     66         socket_close($socket);
     67         if(strcmp(trim($buffer),"busy")==0){
     68         ?>
     69             <script> 
     70                 alert("服务器忙
    "); 
     71             </script>
     72         <?php
     73         }
     74         else if(strcmp(trim($buffer),"no username")==0){
     75         ?>
     76             <script> 
     77                 alert("用户名不存在
    "); 
     78             </script>
     79         <?php
     80             //echo "用户名不存在
    ";
     81         }else{
     82             $buffer = trim($buffer);
     83             //echo $buffer."<br>";
     84             //echo md5($_POST['password'])."<br>";
     85             if(strcmp($buffer, md5($_POST['password']))==0){
     86                 //echo "登录成功!";
     87                 ?>
     88                 <script>
     89                     alert("登录成功!!
    "); 
     90                     location.href="../socket/client.php?user=<?php echo $_POST['username']; ?>";
     91                 </script>
     92 <?php
     93             }
     94             else{
     95             ?>
     96                 <script> 
     97                     alert("密码错误!
    "); 
     98                 </script>
     99             <?php
    100                 //echo "密码错误!";
    101             }
    102         }
    103     }
    104         
    105 ?>
    106 
    107 
    108 </body>
    109 </html>
     1 <?php
     2 //client.php
     3 //write for 张小豪
     4     include("request.php");
     5     set_time_limit(0);
     6      
     7     $host = "127.0.0.1";
     8     $port = 8890;
     9     
    10     
    11     if(@$_POST['submit']){
    12         request_submit($host, $port);
    13     }
    14     if(@$_POST['logout']){
    15         request_logout($host, $port);
    16         setcookie("user");
    17         ?>
    18             <script>
    19                 location.href="../socket/index.php";
    20             </script>
    21         <?php
    22     }
    23 
    24     if(isset($_GET['user']))
    25         setcookie("user", $_GET['user'], time()+3600);
    26     else{
    27     ?>
    28         <script>
    29             alert("请先登录!");
    30             location.href="../socket/index.php";
    31         </script>
    32     <?php
    33     }
    34     
    35 ?>
    36 
    37 <html>
    38 <head>
    39     <title>socket客户端</title>
    40     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    41 </head>
    42 
    43 <body>
    44 
    45 <?php  
    46     //echo $_user = $_GET['user']?$_GET['user']:$_COOKIE['user'];
    47     //print_r($_COOKIE);
    48     //echo "user:".$_GET['user'];
    49 ?>
    50 
    51 <SCRIPT language=javascript>
    52 <!--
    53 function CheckPost()
    54 {
    55     //alert(submitpage.getElementById('logout').onclick);
    56     if(submitpage.username.value=="" && submitpage.logout.onclick==false)
    57     {
    58         alert("请填写学号!");
    59         //submit.username.focus();
    60         return false;
    61     }
    62 }
    63 --> 
    64 </SCRIPT>
    65 
    66 <h3><center>socket客户端程序(q版成绩查询~.~)</center></h3>
    67 <font align="left">欢迎 
    68     <?php 
    69         if(isset($_COOKIE['user']) && $_COOKIE['user'])
    70             $str = $_COOKIE['user'];
    71         else
    72             $str = $_GET['user'];
    73         echo $str; 
    74     ?>
    75 !! 
    76 </font>
    77 <form action = "client.php" name = "submitpage" method = "post" onsubmit="return CheckPost();">
    78     <input type = "submit" name = "logout" value = "登出"></input>
    79     <br><br>
    80 
    81     <center>
    82         <p>请输入学号:<input type = "text" name = "username" size = "20"></input></p>
    83         <input type = "submit" name = "submit" value = "提交"></input>
    84     </center>
    85 </form>
    86 
    87 </center>
    88 
    89 </body>
    90 </html>
     1 <?php
     2 //request for client
     3 //request.php
     4 //write for 张小豪
     5     function request_submit($host, $port){
     6         $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create    socket
    "); // 创建一个Socket
     7         $connection = socket_connect($socket, $host, $port) or die("Could not connet server
    ");    //  连接
     8         socket_write($socket, "user
    ") or die("Write failed
    ");                //通知服务器已经登陆
     9         if(isset($_COOKIE['user']) && $_COOKIE['user'])
    10             $str = $_COOKIE['user'];
    11         else
    12             $str = $_GET['user'];
    13         socket_write($socket, $str."
    ") or die("Write failed
    "); // 将用户名发送到服务器*/
    14         socket_write($socket, $_POST['username']) or die("Write failed
    "); // 将用户名发送到服务器
    15         
    16         if ($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)) {
    17         ?>
    18             <script>
    19                 var str = "The student ID: <?php echo $_POST['username']; ?>
    GPA was:<?php echo trim($buffer); ?>
    ";
    20                 alert(str);
    21                 location.href="../socket/client.php?user=<?php echo $_COOKIE['user']; ?>";
    22             </script>
    23         <?php
    24         }
    25         socket_close($socket);
    26     }
    27 
    28     function request_logout($host, $port){
    29         $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create    socket
    "); // 创建一个Socket
    30         $connection = socket_connect($socket, $host, $port) or die("Could not connet server
    ");    //  连接
    31         socket_write($socket, "logout
    ") or die("Write failed
    ");                //通知服务器已经登陆
    32         if(isset($_COOKIE['user']) && $_COOKIE['user'])
    33             $str = $_COOKIE['user'];
    34         else
    35             $str = $_GET['user'];
    36         socket_write($socket, $str."
    ") or die("Write failed
    "); // 将用户名发送到服务器*/
    37         
    38         if ($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)) {
    39         ?>
    40             <script>
    41                 var str = "user: <?php echo $str; ?> logout success!
    ";
    42                 alert(str);
    43             </script>
    44         <?php
    45         }
    46         socket_close($socket);
    47     }
    48 
    49 ?>
     1 <?php
     2 //server.php
     3 //write for 张小豪
     4     include ("conn.php");
     5     include ("response.php");
     6     set_time_limit(0);
     7      
     8     $host = "127.0.0.1";
     9     $port = 8890;
    10     $localuser = "";    //当前连接用户名
    11 
    12     for($i=0; $i<5; $i++){    
    13         $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Could not create    socket
    "); // 创建一个Socket
    14         $result = socket_bind($socket, $host, $port) or die("Could not bind to socket
    "); //绑定Socket到端口
    15         $result = socket_listen($socket, 3) or die("Could not set up socket listener
    "); // 开始监听连接
    16         $spawn = socket_accept($socket) or die("Could not accept incoming connection
    "); // 处理通信
    17         
    18         $choose = socket_read($spawn, 1024, PHP_NORMAL_READ) or die("Could not read input
    ");//接受选择符
    19         $choose = trim($choose);
    20         echo $choose."<br>";
    21         //echo "i: ".$i."
    ";
    22         if($choose=="user"){
    23             response_user($spawn, $localuser);
    24         }else if($choose=="login"){
    25             response_login($spawn, $localuser);    
    26         }else if($choose=="logout"){
    27             response_logout($spawn, $localuser);
    28         }
    29         // 关闭sockets
    30         socket_close($spawn);
    31         socket_close($socket);
    32     }
     1 <?php
     2 //response for server
     3 //response.php
     4 //write for 张小豪
     5     function response_user($spawn, $localuser){
     6         $localuser = socket_read($spawn, 1024, PHP_NORMAL_READ) or die("Could not read input
    "); // 数据传送 获得客户端的输入
     7         echo "localuser: ".$localuser."
    ";
     8         $input = socket_read($spawn, 1024) or die("Could not read input
    "); // 数据传送 获得客户端的输入
     9         $input = trim($input);
    10         echo 'input:', $input, "
    ";
    11         //从数据库中查gpa
    12         $sql = "select gpa from gpalist where id = '$input'";
    13         $query = mysql_query($sql);
    14         $row = mysql_fetch_array($query);
    15                 
    16         if($row['gpa']) {
    17             $output = $row['gpa']. "
    "; //处理客户端输入并返回结果
    18         }else{
    19             $output = "no imformation 
    "; //处理客户端输入并返回结果
    20         }
    21         echo "output:", $output, "<br>";
    22         //    数据传送 向客户端写入返回结果
    23         socket_write($spawn, $output, strlen($output)) or die("Could not write output
    ");    
    24     }
    25 
    26     function response_login($spawn, $localuser){
    27         $input = socket_read($spawn, 1024) or die("Could not read input
    "); // 数据传送 获得客户端的输入
    28         $input = trim($input);
    29         echo 'username:', $input, "
    ";
    30         //从数据库中查gpa
    31         $sql = "select password from userlist where user = '$input'";
    32         $query = mysql_query($sql);
    33         $row = mysql_fetch_array($query);
    34         
    35         //print_r(row);
    36         if($localuser!=""){
    37             $output = "busy
    ";
    38         }
    39         else{
    40             if($row['password']) {
    41                 $output = $row['password']. "
    "; //处理客户端输入并返回结果
    42             }else{
    43                 $output = "no username
    "; //处理客户端输入并返回结果
    44             }
    45         }
    46         echo "output:", $output, "<br>";
    47         //    数据传送 向客户端写入返回结果
    48         socket_write($spawn, $output, strlen($output)) or die("Could not write output
    ");    
    49     }
    50 
    51     function response_logout($spawn, $localuser){
    52         $input = socket_read($spawn, 1024, PHP_NORMAL_READ) or die("Could not read input
    "); // 数据传送 获得客户端的输入
    53         $input = trim($input);
    54         echo 'username:', $input, "logout<br>";
    55         $output = "success!
    ";
    56         $localuser = "";
    57         //    数据传送 向客户端写入返回结果
    58         socket_write($spawn, $output, strlen($output)) or die("Could not write output
    ");    
    59     }
    60 
    61 ?>
    1 <?php
    2 //连接数据库
    3 
    4     $conn = @mysql_connect("localhost", "root", "") or die ("connect error!");
    5     mysql_select_db("socket", $conn) or die ("select error!");
    6     mysql_query("set names 'utf8'") or die ("wrong");
    7 ?>
    奔跑吧!少年!趁着你还年轻
  • 相关阅读:
    tkinter学习-Lable&Button
    Shell—常见报错问题
    Linux—修改ssh远程登录信息
    Linux—网络管理
    Linux—磁盘管理
    Python—创建进程的三种方式
    Shell—引入外部脚本文件
    Mysql—数据恢复
    Shell—文件内容操作
    Shell—各种括号的用法
  • 原文地址:https://www.cnblogs.com/shu-xiaohao/p/3350765.html
Copyright © 2020-2023  润新知