2014-09-29 51 views
1

我試圖讓node.js服務器和LÖVE2D客戶端通過套接字進行通信。 (只是一個簡單的「hello world」測試。)node.js和LÖVE2D都運行在同一臺PC上。Node.js和LÖVE2D套接字通信

我設法從LÖVE2D發送消息到node.js,但我無法讀取服務器的答案。

我的node.js服務器代碼如下所示:在LÖVE2D

var net = require('net'); 
var mySocket; 

var server = net.createServer(function(socket) { 
    mySocket = socket; 
    mySocket.on("connect", onConnect); 
    mySocket.on("data", onData); 
}); 

function onConnect() { 
    console.log("Connected to LOVE2D"); 
} 

function onData(d) { 
    if(d == "exit\0") { 
     console.log("exit"); 
     mySocket.end(); 
     server.close(); 
    } 
    else { 
     console.log("Message from LOVE2D: " + d); 
     mySocket.write("Message received!", 'utf8'); 
    } 
} 

server.listen(50000, "localhost"); 

和客戶端的代碼如下所示:

local host, port = "localhost", 50000 
local socket = require("socket") 
local tcp = assert(socket.tcp()) 

tcp:connect(host, port) 
tcp:send("hello there") 
tcp:close() 

function love.draw() 
    love.graphics.print("can't read server answer!", 400, 300) 
end 

好了,以前的代碼只是發送一條消息。我應該用什麼語法從node.js服務器讀取答案?例如,這只是給了我一個錯誤:

local host, port = "localhost", 50000 
local socket = require("socket") 
local tcp = assert(socket.tcp()) 

tcp:connect(host, port) 
local answer = tcp:send("hello there") 
tcp:close() 

function love.draw() 
    love.graphics.print(answer, 400, 300) 
end 

下面是關於LÖVE2D& LuaSocket聯網的一些文件,但文件並沒有幫助我:

http://love2d.org/wiki/Tutorial:Networking_with_UDP

http://w3.impa.br/~diego/software/luasocket/

(對不起,「noob」的問題,我真的是新的HTTP協議和東西。)

回答

3

您需要使用receive通話以及:

tcp:connect(host, port) 
tcp:send("hello there\n") 
local answer = tcp:receive() 
tcp:close() 

function love.draw() 
    love.graphics.print(answer, 400, 300) 
end 

小心在你的郵件新的生產線; receive的默認「模式」是讀取一行(由CR?LF終止),所以如果行尾字符不存在,接收操作將阻止等待它們。另一種方法是讀取一定數量的字符,但由於您不知道消息的長度,因此您需要提供某種頭文件(例如,首先發送兩個字節來編碼長度接下來的信息)。

也可以使用組合:首先發送一行,並在後面的有效負載中包含字節數(如果有的話)。例如「200 OK 135」或「500 ERROR」,然後使用該長度(OK消息中的135)讀取:。如果你最終使用基於TCP的協議,你可能需要使它成爲非阻塞的,否則任何網絡延遲都會阻止你的遊戲;看到這個SO answer一些指針。

+0

謝謝!現在就像魅力一樣。你提到「行尾字符」是很好的。在我改變這一行之前,LÖVE2D確實凍結了:mySocket.write(「收到的消息!\ n」,'utf8'); – apk 2014-09-29 08:02:35