您的位置:首页 > 理论基础 > 计算机网络

node和php相通(利用socket中的tcp协议)

2015-07-19 10:22 603 查看
目的:node和php数据相通

实现:利用socket中的tcp协议

nodejs代码

var http = require('http');
http.createServer(function (req, res) {
// res.writeHead(200, {'Content-Type': 'text/plain'});
// res.end('Hello World\n');
if( req.url !=''){
var net = require('net');
var client = net.connect({port: 8124},
function() { //'connect' 监听器
console.log('client connected');
client.write(req.url+'world!\r\n');
});
client.on('data', function(data) {
console.log(data.toString());
client.end();
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(data.toString()+'\n');

});
client.on('end', function() {
console.log('客户端断开连接');
});

}

}).listen(1337, '127.0.0.1');
console.log('Server running at ' target='_blank'>http://127.0.0.1:1337/');[/code] 
php代码TCP服务器

<?php

/**
* File name server.php
* 服务器端代码
*
* @author guisu.huang
* @since 2012-04-11
*
*/

//确保在连接客户端时不会超时
set_time_limit(0);
//设置IP和端口号
$address = "localhost";
$port = 8124; //调试的时候,可以多换端口来测试程序!
$tot_buff=null;
/**
* 创建一个SOCKET
* AF_INET=是ipv4 如果用ipv6,则参数为 AF_INET6
* SOCK_STREAM为socket的tcp类型,如果是UDP则使用SOCK_DGRAM
*/
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");
//阻塞模式
socket_set_block($sock) or die("socket_set_block() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");
//绑定到socket端口
$result = socket_bind($sock, $address, $port) or die("socket_bind() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");
//开始监听
$result = socket_listen($sock, 4) or die("socket_listen() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");
echo "OK\nBinding the socket on $address:$port ... ";
echo "OK\nNow ready to accept connections.\nListening on the socket ... \n";
do { // never stop the daemon
//它接收连接请求并调用一个子连接Socket来处理客户端和服务器间的信息
$msgsock = socket_accept($sock) or  die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n");

//读取客户端数据
echo "Read client data \n";
//socket_read函数会一直读取客户端数据,直到遇见\n,\t或者\0字符.PHP脚本把这写字符看做是输入的结束符.
$buf = socket_read($msgsock, 8192);
$tot_buff.=$buf;
echo "Received msg: $tot_buff   \n";

//数据传送 向客户端写入返回结果
$msg = "{$buf} \n";
socket_write($msgsock, $msg, strlen($msg)) or die("socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n");
//一旦输出被返回到客户端,父/子socket都应通过socket_close($msgsock)函数来终止
socket_close($msgsock);
} while (true);
socket_close($sock);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: