Table des matières
回复讨论(解决方案)
Maison développement back-end tutoriel php 接收socket数据,但是绑定服务器那边数据是一直发的,为什么只接受到一串

接收socket数据,但是绑定服务器那边数据是一直发的,为什么只接受到一串

Jun 23, 2016 pm 01:02 PM

发送数据是这样@,13,56,89,5,21,64,79,51,46,31,$的,我接收的是这样的
{"is_ok":1,"data":@,13,56,89,5,21,64,79,51,46,31,$}
但是数据是一直发,虽然都是同一串数据,但是我只接受一串,后面就没有了,怎么定义数据的开始和结束标志的!!想在服务端添加到数据库看看,但是怎么转成json数据格式啊!发送数据格式要怎么改,因为后面要用ajax得到数据添加到highchart,怎么调用这串数据啊!是写成json数组吗!
 

/*------------------------------------------------------ *///-- socket客户端/*------------------------------------------------------ */ //+error_reporting(0);set_time_limit(0); // 接收GET数据$msg = isset($_GET['msg']) ? trim($_GET['msg']) : ''; // socket错误代码function strerror($code) {    $str = '';    switch($code) {        case 10022:            $str = '参数错误';            break;        case 10048:            $str = '通常每个套接字地址(协议/网络地址/端口)只允许使用一次。';            break;        case 10061:            $str = '由于服务器积极拒绝,连接失败!';            break;        default:            $str = '未知错误';            break;    }    return $str;} function get_server_config() {    return simplexml_load_file('include/server_config.xml');}// 获取socket服务端配置信息$server_conf = get_server_config();$ip = $server_conf->ip;$port = (int)$server_conf->port; $out_str = '{"is_ok":0,"data":'; // 创建socketif(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {    $out_str .= '"' . strerror(socket_last_error()) . '"}';} // 连接到服务器else if(socket_connect($socket, $ip, $port) === false) {    $out_str .= '"' . strerror(socket_last_error($socket)) . '"}';} // 向服务器发送请求else if(socket_write($socket, $msg, strlen($msg)) === false) {    $out_str .= '"' . strerror(socket_last_error($socket)) . '"}';} else if(($out = socket_read($socket, 8192)) === false) {    $out_str .= '"' . strerror(socket_last_error($socket)) . '"}';} else {    $out_str = '{"is_ok":1,"data":' . $out . '}';} echo $out_str; // 关闭socketsocket_close($socket); /*------------------------------------------------------ *///-- socket服务端/*------------------------------------------------------ */ include('include/init.php');// 设置时区//date_default_timezone_set('Etc/GMT-8'); echo str_repeat(' ', 4000);error_reporting(0);set_time_limit(0); ob_start(); // 显示提示信息function show_tip($msg, $is_ok=true) {    if($is_ok) {        $msg = '<font color=\"#090\">' . $msg . '</font>';    } else {        $msg = '<font color=\"#f00\">' . $msg . '</font>';    }    echo '<script>parent.$("#tip").showTip("' . date('Y-m-d H:i:s', time()) . '","' . $msg . '");</script>';    ob_flush();    flush();    sleep(1);} // 获取socket服务端配置信息$server_conf = get_server_config();$ip = $server_conf->ip;$port = (int)$server_conf->port;$server_name = $server_conf->name; show_tip($server_name . ' 正在初始化...'); // 创建socketif(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {    show_tip($server_name . ' 创建失败,原因:' . strerror(socket_last_error()), false);} else {    show_tip($server_name . ' 创建成功!');} // 绑定socket到指定IP,端口if(socket_bind($socket, $ip, $port) === false) {       show_tip('绑定 ' . $server_name . ' 失败,原因:' . strerror(socket_last_error($socket)), false);} else {    show_tip('绑定 ' . $server_name . ' 到 ' . $ip . ', ' . $port);} // 监听if(socket_listen($socket, 5) === false) {    show_tip($server_name . ' 监听失败,原因:' . strerror(socket_last_error($socket)), false);} else {    show_tip($server_name . ' 正在监听中...');    echo '<script>location.href="login.php";</script>';    ob_flush();    flush();} static $w_socket = null;    // webstatic $a_socket = null;    // android $rNodeDataModel = new NodeDataModel(); do {    if(($msg_socket = socket_accept($socket)) === false) {        socket_close($msg_socket);        break;    } else {        if(($buffer = socket_read($msg_socket, 8192)) !== false) {             $buffer = trim($buffer);             if($buffer == 'web') {                $w_socket = $msg_socket;            } else if($buffer == 'android') {                $a_socket = $msg_socket;            } else if($buffer != 'stop') {                 $str_arr = explode('&', $buffer);                if(!empty($str_arr[1])) {                     $c_name = trim($str_arr[0]); // 客户端标识                    $c_data = trim($str_arr[1]); // 客户端数据                    if($c_name == 'computer') {                        // 判断数据是否为json格式                        if(($r_arr = json_decode($c_data, true)) != null) {                             if($w_socket != null) {                                socket_write($w_socket, $c_data, strlen($c_data));                            }                            if($a_socket != null) {                                socket_write($a_socket, $c_data, strlen($c_data));                            }                             // 添加到数据库                            foreach($r_arr as $v) {                                $v['node_id'] = $v['point'];                                unset($v['point']);                                $v['create_time'] = time();                                $rNodeDataModel->insert($v);                            }                        }                    }                 }                 socket_close($msg_socket);             } else {                socket_close($msg_socket);            }        } else {            socket_close($msg_socket);        }    } } while($buffer != 'stop'); // 关闭socketsocket_close($w_socket);socket_close($a_socket);socket_close($socket);
Copier après la connexion


回复讨论(解决方案)

你请求一次,自然只得到一次数据

你请求一次,自然只得到一次数据

哪请问版主,怎么多次请求,还有时间间隔怎么写的,用不用定义那串数据的开始和结束标记啊!谢谢版主

你请求一次,自然只得到一次数据

如果要把那串数据添加到数据库,那串数据要怎么修改格式(原始格式或者接收到的)和调用,

你多次调用客户端程序,就可多次收到数据了
如何把数据放进数据库,取决于你数据库中是如何保存的
传输的数据格式应按你的使用需求进行设计

你多次调用客户端程序,就可多次收到数据了
如何把数据放进数据库,取决于你数据库中是如何保存的
传输的数据格式应按你的使用需求进行设计


function connect() {		$.ajax({			url: 'client.php?msg=web',			type: 'get',			dataType: 'json',			success: function(result) {//由服务器返回,并根据 dataType 参数进行处理后的数据;描述状态的字符串。				  $('#tb tr:gt(0)').remove();//删除之前的数据				if(result.is_ok) {					var x = (new Date()).getTime();					$.each(result.data, function(i) {						var index = parseInt(result.data[i].point) - 1;						chart01.series[index].addPoint([x, parseFloat(result.data[i])], true, true);						chart02.series[index].addPoint([x, parseFloat(result.data[i])], true, true);						chart03.series[index].addPoint([x, parseFloat(result.data[i])], true, true);						chart04.series[index].addPoint([x, parseFloat(result.data[i])], true, true);						chart05.series[index].addPoint([x, parseFloat(result.data[i])], true, true);						chart06.series[index].addPoint([x, parseFloat(result.data[i])], true, true);						chart07.series[index].addPoint([x, parseFloat(result.data[i])], true, true);						chart08.series[index].addPoint([x, parseFloat(result.data[i])], true, true);						chart09.series[index].addPoint([x, parseFloat(result.data[i])], true, true);						chart10.series[index].addPoint([x, parseFloat(result.data[i])], true, true);					},1000);//这里的是隔时间自动取数据				} else {					error = true;					layer.alert(result.data);				}	        },			complete: function(XHR, TS) {//请求完成后回调函数 (请求成功或失败之后均调用)。				XHR = null; // 释放XMLHttprequest对象				if(!error)					connect();			}		});	}	function create_data() {		var data = [],			time = (new Date()).getTime(),			i;		for (i = -19; i <= 0; i++) {			data.push({				x: time + i * 1000			});		}		return data;	}	var chart01, chart02, chart03, chart04, chart05, chart06, chart07,chart08,chart09,chart10;	function create_chart(id, t, y_t) {		var chart = new Highcharts.Chart({			chart: {				renderTo: id,				type: 'spline',				animation: Highcharts.svg,				backgroundColor: '#272735',				events: {					load: connect				}			},			title: {				text: t			},			xAxis: {				type: 'datetime',				tickPixelInterval: 150			},			yAxis: {				title: {					text: y_t				},				plotLines: [{//线					value: 0,					width: 1,					color: '#808080'				}]			},			tooltip: {				formatter: function() {					return '<b>'+ this.series.name +'</b><br/>'+					Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x);				}			},			series: [{				name: '实时数据',				data: [29.9, -71.5, 106.4, 15.2, 144.0, 258.0, 135.6, 177.5, 216.4, 194.1, 95.6, 54.4] //create_data()			}],			credits:{				 enabled:false			}		});		return chart;	}
Copier après la connexion
如何把取到的data数据赋给每个chart表,{"is_ok":1,"data":[13,56,89,5,21,64,79,51,46,31]},如何在series中的data表示出来。希望给一些实质的建议。谢谢

建议你认真阅读一下 Highcharts 的 ajax 范例
肯定要比我专业的多

就是把data的值,怎么拿出来不知道,像result.data[i]这种形式

  你代码请求一次当然是一个结果

  你代码请求一次当然是一个结果

我把网站打开,只打开一次啊!不停刷新才不断请求啊。所以加了这个  
$.each(result.data, function(i) {
                        var index = parseInt(result.data[i].point) - 1;
 
                        chart01.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
                        chart02.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
                        chart03.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
                        chart04.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
                        chart05.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
                        chart06.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
                        chart07.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
                        chart08.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
                        chart09.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
                        chart10.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
                    },1000);//1000每隔时间会自动取数据
关键怎么data的值怎么给坐标  chart1.series[index].addPoint([x, parseFloat(result.data[i])], true, true);
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Expliquez le concept de liaison statique tardive en PHP. Expliquez le concept de liaison statique tardive en PHP. Mar 21, 2025 pm 01:33 PM

L'article traite de la liaison statique tardive (LSB) dans PHP, introduite dans PHP 5.3, permettant une résolution d'exécution de la méthode statique nécessite un héritage plus flexible. Problème main: LSB vs polymorphisme traditionnel; Applications pratiques de LSB et perfo potentiel

Caractéristiques de sécurité du cadre: protection contre les vulnérabilités. Caractéristiques de sécurité du cadre: protection contre les vulnérabilités. Mar 28, 2025 pm 05:11 PM

L'article traite des fonctionnalités de sécurité essentielles dans les cadres pour se protéger contre les vulnérabilités, notamment la validation des entrées, l'authentification et les mises à jour régulières.

Frameworks de personnalisation / d'extension: comment ajouter des fonctionnalités personnalisées. Frameworks de personnalisation / d'extension: comment ajouter des fonctionnalités personnalisées. Mar 28, 2025 pm 05:12 PM

L'article examine l'ajout de fonctionnalités personnalisées aux cadres, en se concentrant sur la compréhension de l'architecture, l'identification des points d'extension et les meilleures pratiques pour l'intégration et le débogage.

Comment envoyer une demande post contenant des données JSON à l'aide de la bibliothèque Curl de PHP? Comment envoyer une demande post contenant des données JSON à l'aide de la bibliothèque Curl de PHP? Apr 01, 2025 pm 03:12 PM

Envoyant des données JSON à l'aide de la bibliothèque Curl de PHP dans le développement de PHP, il est souvent nécessaire d'interagir avec les API externes. L'une des façons courantes consiste à utiliser la bibliothèque Curl pour envoyer le post� ...

Décrivez les principes solides et comment ils s'appliquent au développement de PHP. Décrivez les principes solides et comment ils s'appliquent au développement de PHP. Apr 03, 2025 am 12:04 AM

L'application du principe solide dans le développement de PHP comprend: 1. Principe de responsabilité unique (SRP): Chaque classe n'est responsable d'une seule fonction. 2. Principe ouvert et ferme (OCP): les changements sont réalisés par extension plutôt que par modification. 3. Principe de substitution de Lisch (LSP): les sous-classes peuvent remplacer les classes de base sans affecter la précision du programme. 4. Principe d'isolement d'interface (ISP): utilisez des interfaces à grain fin pour éviter les dépendances et les méthodes inutilisées. 5. Principe d'inversion de dépendance (DIP): les modules élevés et de bas niveau reposent sur l'abstraction et sont mis en œuvre par injection de dépendance.

Comment fonctionne le détournement de session et comment pouvez-vous l'atténuer en PHP? Comment fonctionne le détournement de session et comment pouvez-vous l'atténuer en PHP? Apr 06, 2025 am 12:02 AM

Le détournement de la session peut être réalisé via les étapes suivantes: 1. Obtenez l'ID de session, 2. Utilisez l'ID de session, 3. Gardez la session active. Les méthodes pour empêcher le détournement de la session en PHP incluent: 1. Utilisez la fonction Session_RegeReate_id () pour régénérer l'ID de session, 2. Stocker les données de session via la base de données, 3. Assurez-vous que toutes les données de session sont transmises via HTTPS.

See all articles