0
코드 아래
내 PHP CLI TCP 서버 소켓입니다,하지만 난 그것을 만들 수있는 방법을 모르는하거나 UDP 서버하지만 TCP & UDP 소켓 서버를 만들려고PHP CLI의 UDP 서버 소켓
MyCodes :
코드 위// PHP SOCKET SERVER
error_reporting(E_ERROR);
// Configuration variables
$host = "192.168.0.1";
$port = 5009;
$max = 20;
// MySQL Database Conf
$db_host ='localhost';
$db_user ='root';
$db_pass ='5222348';
$db_database ='gps';
mysql_connect("$db_host", "$db_user", "$db_pass")or die("################# Can't connet to mysql server");
mysql_select_db("$db_database")or die("################# Can't connet to database");
// --------------------------------
$client = array();
// No timeouts, flush content immediatly
set_time_limit(0);
ob_implicit_flush();
// Server functions
function rLog($msg){
$msg = "\n[".date('Y-m-d H:i:s')."]:".$msg;
echo($msg);
}
// Create socket
// $sock = socket_create(AF_INET,SOCK_DGRAM,0) or die("[".date('Y-m-d H:i:s')."] Could not create socket\n"); UDP communication
$sock = socket_create(AF_INET,SOCK_STREAM,0) or die("[".date('Y-m-d H:i:s')."] Could not create socket\n");
// Bind to socket
socket_bind($sock,$host,$port) or die("[".date('Y-m-d H:i:s')."] Could not bind to socket\n");
// Start listening
socket_listen($sock) or die("[".date('Y-m-d H:i:s')."] Could not set up socket listener\n");
rLog("
Server started at ".$host.":".$port."\nrev:23-7-11:13");
// Server loop
while(true){
socket_set_block($sock);
// Setup clients listen socket for reading
$read[0] = $sock;
for($i = 0;$i<$max;$i++){
if($client[$i]['sock'] != null)
$read[$i+1] = $client[$i]['sock'];
}
// Set up a blocking call to socket_select()
$ready = socket_select($read,$write = NULL, $except = NULL, $tv_sec = NULL);
// If a new connection is being made add it to the clients array
if(in_array($sock,$read)){
for($i = 0;$i<$max;$i++){
if($client[$i]['sock']==null){
if(($client[$i]['sock'] = socket_accept($sock))<0){
rLog("socket_accept() failed: ".socket_strerror($client[$i]['sock']));
}else{
socket_getpeername($client[$i]['sock'], $address, $port);
rLog("Client #".$i." connected from : ".$address.":".$port."");
}
break;
}elseif($i == $max - 1){
rLog("Too many clients");
}
}
if(--$ready <= 0)
continue;
}
for($i=0;$i<$max;$i++){
if(in_array($client[$i]['sock'],$read)){
$input = socket_read($client[$i]['sock'],1024);
if($input==null){
unset($client[$i]);
}
$n = trim($input);
$com = split(" ",$n);
if($n=="EXIT"){
if($client[$i]['sock']!=null){
// Disconnect requested
socket_close($client[$i]['sock']);
unset($client[$i]['sock']);
rLog("Disconnected(2) client #".$i);
for($p=0;$p<count($client);$p++){
socket_write($client[$p]['sock'],"DISC ".$i.chr(0));
}
if($i == $adm){
$adm = -1;
}
}
}elseif($n=="TERM"){
// Server termination requested
socket_close($sock);
rLog("Terminated server (requested by client #".$i.")");
exit();
}elseif($input){
// ----------------------------------------- //
// $handle = fopen('inbox.txt', 'a+');
// fwrite($handle,
// $input."\n".
// "------------------------------------------------------------\n");
// ########################################################################################### //
// $input = "$POS,115316,160137.000,A,2719.9343,N,05310.5553,E,0.00,,180712,,,A/00000,00000/0,0,0,0/794"; // Sample Data
$input_first = explode(",", $input);
$frstvalue=$input_first[0]; // $POS - Command
echo $input;
$handle = fopen('force.log', 'a+');
fwrite($handle,
"Time:[".date('Y-m-d H:i:s')."] , from : ".$address.":".$port."\ninput: ".$input."\n".
"-------------------------------------------------------------------------------------\n");
###########################
}
}else{
//}
}
}
}
// Close the master sockets
socket_close($sock);
완벽 TCP 연결에서 작동하지만, UDP 요청을 드릴 수 없습니다 s.
고맙습니다.하지만이 설정을 변경하는 데 문제가 있다고 생각합니다. 첫 번째 원본 원본 코드의 변경 사항을 위에 설정할 수 있습니까? ;) – Root125
나는 당신이 무슨 뜻인지 정말로 모르겠다. 내가 코드를 편집하기를 원한다면, 그렇게하지 않을 것입니다. –
사용하지만 오류가 발생합니다 : -? , udp로부터의 Send 입력은 서버에 echo되지 않습니다. – Root125