現(xiàn)在有一個(gè)需求,有一堆手持設(shè)備會(huì)往指定的IP和端口(服務(wù)器IP)發(fā)送數(shù)據(jù),我要做的工作就是接收這個(gè)端口發(fā)送的數(shù)據(jù),想知道如何才能做到對(duì)面的手持設(shè)備不主動(dòng)斷開(kāi)我就能一直開(kāi)啟監(jiān)聽(tīng)接收數(shù)據(jù)并且返回給他,而且如果此時(shí)有別的設(shè)備在連接也可以連接,我寫(xiě)的代碼可以持續(xù)接收一個(gè)設(shè)備連接上來(lái)的數(shù)據(jù),但是其他的就不能連接了
$host = "192.168.0.30";
$port = 3333;
set_time_limit(0);
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("創(chuàng)建socket失??!\n");
$result = socket_bind($socket, $host, $port) or die("端口綁定失敗!\n");
$result = socket_listen($socket, 3) or die("端口監(jiān)聽(tīng)失?。n");
$spawn = socket_accept($socket) or die("接收數(shù)據(jù)失?。n");
do {
//讀取客戶端發(fā)送的數(shù)據(jù)
$input = socket_read($spawn, 1024) or die("讀取數(shù)據(jù)失??!\n");
if(isset($input2)) {
if($input2 == '# HEA_PACK BK123456') {
mysql_query("INSERT INTO taskFault (functionEncoding) VALUES ('$input2')");
continue;
}
}
$input = trim($input);
//額外添加的關(guān)閉命令
if($input == 'exit') {
socket_close($socket);
break;
}
//收到數(shù)據(jù)處理流程
if(isset($input)) {
if($input == '# HEA_PACK BK123456') {
mysql_query("INSERT INTO taskFault (functionEncoding) VALUES ('$input')");
continue;
}
$array = explode(',', $input);
//將收到的數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)表格中
$functionEncoding = $array;
$deviceId = $array;
$persionId = $array;
$stationId = $array;
$operationType = $array;
$taskNum = $array;
$taskSer = $array;
$taskName = $array;
$i = 1;
mysql_query("INSERT INTO taskFault (functionEncoding,deviceId,persionId,stationId,operationType,taskNum,taskSer,taskName) VALUES (
'$functionEncoding','$deviceId','$persionId','$stationId','$operationType','$taskNum','$taskSer','$taskName'
)");
if(mysql_affected_rows() != 1) continue;
//
if($array == 'TASK_RUN') {
if($array == 'EQU_APPLY') {
$sql = "SELECT * FROM maintenancetask limit 0,5";
$query = mysql_query($sql);
$count = mysql_affected_rows();
// $str = null;
while(!!$task = mysql_fetch_array($query)) {
$taskSer = "N".$i;
$str = "#,TASK_RUN,".$array.",".$array.",".$array.",PC_LIST,".$count.",".$taskSer.",".$task.",\\r\\n";
socket_write($spawn, $str, strlen ($str)) or die("Could not write output\n");
$functionEncoding = "TASK_RUN";
$deviceId = $array;
$persionId = $array;
$stationId = $array;
$operationType = "PC_LIST";
$taskNum = $count;
$taskName = $task;
mysql_query("INSERT INTO taskFault (functionEncoding,deviceId,persionId,stationId,operationType,taskNum,taskSer,taskName) VALUES (
'$functionEncoding','$deviceId','$persionId','$stationId','$operationType','$taskNum','$taskSer','$taskName'
)");
$i ++;
}
}
}
}
} while(true);
socket方面是個(gè)小白,希望大神幫忙看看
用workerman吧
workerman能實(shí)現(xiàn)嗎,我下載幾個(gè)例子試了一下,沒(méi)找到大概相似的,我下了聊天的和多人在線游戲那個(gè),有跟我需求差不太多例子嗎,我試試
看手冊(cè)上的簡(jiǎn)單示例就行
http://doc3.workerman.net/getting-started/simple-example.html