解決方案從OP的問題
我搞砸了很大的時間提取。就像在示例中一樣,我使用server.listen(port, '127.0.0.1')
,這意味着只有本地主機才能訪問該服務。
這裏是我的源代碼:
//+-----------------------------------------+
//| TCP Server |
//| Description: MySQL connector. |
//| Speaks JSON over TCP |
//+-----------------------------------------+
//| Author: /usr/share |
//+-----------------------------------------+
//| Dependencies: Node.js, MySQL, |
//| MySQL for Node.js |
//+-----------------------------------------+
/********************************************
* Standard functions *
********************************************/
/*
* Deletes trailing spaces
*/
function trim(str) {
return str.replace(/^\s*/, "").replace(/\s*$/, "");
}
/*
* Writes the log with the operations executed in order
*/
function writeLog(str) {
var fs = require('fs');
var log = fs.createWriteStream('log.txt', {'flags': 'a'});
log.write(str);
}
/*
* Executes DML instructions on the MySQL DB
* op parameters:
* [0] Select
* [1] Insert
* [2] Update
* [3] Delete
*/
function queryDB(request, socket) {
var Client = require('mysql').Client;
var client = new Client();
client.user = 'root';
client.password = '';
client.host='127.0.0.1';
client.port='3306';
client.database='usrshare';
var op = request['op'];
var query;
// Parse a query from its corresponding op
if(op == 0) {
query = 'SELECT * FROM DATA';
} else if(op == 1) {
query = "INSERT INTO `usrshare`.`data` (`str`) VALUES ('" + request['data'] + "');";
} else if(op == 2) {
query = "DELETE FROM `usrshare`.`data` WHERE `id` = " + request['id'];
} else if(op == 3) {
query = "UPDATE `usrshare`.`data` SET `str` = '" + request['data'] + "' where `id` = " + request['id'];
}else {
console.log("This shouldn't be happening");
return null;
}
// Query the current database
client.query(
query,
function selectData(err, results, fields) {
if (err) {
console.log("Error: " + err.message + "\n");
socket.write("Error: " + err.message + "\n");
writeLog("Error: " + err.message + "\n");
return null;
}
client.end();
if(op == 0) {
socket.write(JSON.stringify(results) + "\n");
writeLog("op:" + op + "\n");
} else if(op == 1) {
socket.write("Row inserted\n");
writeLog("op:" + op + " data: " + request['data'] + "\n");
} else if(op == 2) {
socket.write("Row deleted\n");
writeLog("op:" + op + " id: " + request['id'] + "\n");
} else if(op == 3) {
writeLog("op:" + op + " id: " + request['id'] + " data: " + request['data'] + "\n");
socket.write("Row updated\n");
}
return results;
});
}
//-------------------------------------------
//-------------------------------------------
/********************************************
* Entry point *
********************************************/
if(process.argv.length != 3) {
console.log('Error, use: ' + process.argv[0] + ' ' + process.argv[1] + ' <port>');
process.exit(1);
}
var port = process.argv[2];
var net = require('net');
// Actual server
var server = net.createServer(function (socket) {
socket.setEncoding('utf8');
socket.on('data', function(data) {
request = JSON.parse(data);
queryDB(request, socket);
});
});
// Listening on localhost
server.listen(port, '127.0.0.1');
console.log('Listening on port ' + port);
你有沒有正確地配置你的路由器?說港口已經開放了嗎? – 2012-01-31 01:21:01
是的,實際上我用netcat測試了這個端口,它連接了,但我開始懷疑。如果netcat連接,那麼端口將會打開,對吧? – Heldraug 2012-01-31 01:23:26
你有沒有嘗試過你的端口? – 2012-01-31 01:25:23