在一个星期前PHP已经完工了这个程序一直没有时间写博客。今天把这个程序放上来,在网上用PHP实现的socket也不多。所以放上自己写的程序,希望能给需要的人提供一些帮助。自学PHP程序没多久若有漏洞与不足请多多谅解!
功能:主要是提供登录功能,成绩查询功能,登出功能三种
程序主体:分三大块
•Index.php(登录界面)
•Client.php (客户界面)
+request.php(函数)
•Server.php (服务器界面)
+response.php (函数)
+conn.php(数据库连接)
用的是TCP, 由于PHP本身不支持多线程所以只实现了客户服务器一对一。服务端由一个变量记录了当前用户。
通信过程:
在客户端请求通信时现发送一个字符串至服务端,服务端有字符串得知需要提供的服务并转入相应的分支。
具体代码如下:
1 6 9 12 13 14 1550 69 72 76 79 "; 84 //echo md5($_POST['password']).""; 85 if(strcmp($buffer, md5($_POST['password']))==0){ 86 //echo "登录成功!"; 87 ?> 88 92 96 99 106 107 108 109登陆界面 16 17 18 19 20 41 4243
客户端登录
1 18 21 28 32 36 37 38 3986 87 88 89 90socket客户端 40 41 42 43 44 45 50 51 65 6667 欢迎 68 75 !! 76 77
socket客户端程序(q版成绩查询~.~)
1 18 23 40 44
1 ";21 //echo "i: ".$i."\n";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 // 关闭sockets30 socket_close($spawn);31 socket_close($socket);32 }
1 ";22 // 数据传送 向客户端写入返回结果23 socket_write($spawn, $output, strlen($output)) or die("Could not write output\n"); 24 }25 26 function response_login($spawn, $localuser){27 $input = socket_read($spawn, 1024) or die("Could not read input\n"); // 数据传送 获得客户端的输入28 $input = trim($input);29 echo 'username:', $input, "\n";30 //从数据库中查gpa31 $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\n";38 }39 else{40 if($row['password']) {41 $output = $row['password']. "\n"; //处理客户端输入并返回结果42 }else{43 $output = "no username\n"; //处理客户端输入并返回结果44 }45 }46 echo "output:", $output, "";47 // 数据传送 向客户端写入返回结果48 socket_write($spawn, $output, strlen($output)) or die("Could not write output\n"); 49 }50 51 function response_logout($spawn, $localuser){52 $input = socket_read($spawn, 1024, PHP_NORMAL_READ) or die("Could not read input\n"); // 数据传送 获得客户端的输入53 $input = trim($input);54 echo 'username:', $input, "logout";55 $output = "success!\n";56 $localuser = "";57 // 数据传送 向客户端写入返回结果58 socket_write($spawn, $output, strlen($output)) or die("Could not write output\n"); 59 }60 61 ?>
1