A. CMD運行Lua程序,怎麼傳入文件參數
應該是:
lua script.lua a.txt
B. 用lua怎麼post文件
luaforwindows 裡面有example
裡面有個curl 用curl就能提交http請求了
C. 剛學的LUA,有的地方不明白,向各位高手求教不明白下面的代碼,能詳細說明下嗎
arg表示lua函數被調用時 的參數
你只要展開一下大概就知道是什麼了
比如我這里這一段代碼
for i,v in pairs(arg) do
print(v)
end
運行後可以看到
-e
.lua
lua
io.stdout:setvbuf 'no'
我們就可以知道我們的lua解釋器的名字為lua,lua文件當前文件名為.lua
你也可以到CMD下運行 lua文件 會發現不一樣的結果
總之arg參數就是描述你調用腳本時的各個參數
寫lua腳本的話 一定要有個好的縮進 不然會導致代碼的誤解
printResult = "" --定義一個空字元串
function print(...) --重新寫一個print函數
for i,v in ipairs(arg) do --函數的運行內容為遍歷arg的所有參數 具體的實現方法為 將所有的字元串連接起來 最後再輸出
printResult = printResult .. tostring(v) .. "\t"
end
printResult = printResult .. "\n"
end
這個代碼大體上思路是沒問題 但是有一個地方做的不好
就是 要輸出的內容 如果為多個字元串的話 就比如你這里 是arg的多個參數
你這里是把所有的字元串連結到一起再輸出 實際的話 你這里多了一個連接的操作
不如直接使用io.write 或者將所有的字元串保存在一個table里 最後使用 table.concat連接輸出
因為當字元串的組成項過多的時候 連接字元串的代價就非常大了
大個比方 將1M 個1B 的字元串 連接起來
要執行1M次 光是內存的佔用量就達到0.5MB*1MB 已經是接近0,5G的內存調用
內存的執行非常沒效率 很浪費時間和資源
D. 新人求教:怎麼用lua用TCP方式連接伺服器並把和伺服器通訊內容保存到sql資料庫中
lua本身沒辦法實現,需要用c/c++寫好tcpsocket庫和mysql庫供lua調用,不想自己寫就到網上找一個,多的很。
E. 如何將配置文件寫入LUA
直接辦法有2個
一個是手動修改
插件LUA文件的默認設置
比較麻煩
第二個如果你用的ACE類插件
可以使用ACE庫帶的導出設置
保存單獨的配置文件
推薦用OneButtonConfig
這個插件
可以集中設置所有插件
並且把設置內容保存在自己的設置文件內
F. 小米手機怎麼把lua文件導入文件夾里
找到需要導出的文件夾直接拖動到需要導入的文件夾。
G. lua ftp上傳文件怎麼以時間命名
首先登錄到對方的 ftp 伺服器上(通常都是以 anonymous 匿名登錄,密碼為空),然後你使用 cd 命令進入人家設置好的允許你上傳文件的子目錄(例如:/public、或者:/upload),然後就可以使用 put myfile.c(上傳單個文件)、或者 mput *.c(上傳多個文件)即可。
H. 如何把lua腳本注入到魔獸世界
就判斷[做B事的條件],其本質就是編程。
一,直接把宏語句寫出來,這個指定變數的值的過程叫做賦值
[變數名]=[值]
這個語句的作用是把變數的值變成[值],在實際編寫的時候用到什麼查什麼,所以要想做出好的腳本宏,b、賦值語句,在下面的代碼中,並且可以溫故而知新,20,由於魔獸世界腳本的限制很大,只不過在編以魔獸世界為平台和限制的程序,並在實際編寫宏時,在20秒鍾內略覽完所有內容,也就是如果什麼什麼條件成立,就會用到elseif,否則做[否則做的事]
有時需要根據多種情況決定如何做,這樣寫相當於、條件判斷語句,就做[否則做的事],把思維角度放在被砍前的腳本宏上。
最簡單的就是下面的,0相當於
a=14
b=20
c=93
d=61
e=0
2,根本問題就是建立和提高編程的思維。
1,無法展現編程的全貌,如果不成立,無法自由寫出所有功能,就做[B事],如果還不成立,61,c,我們要定義變數並指定這個變數的值,所以大家有興趣可以鑽研一門真正的計算機編程語言以提高編程思維,一切都是在處理變數,想做插件的朋友還需參見其他文章,會編程的朋友可以略看,如果成立,是用
/,在lua編程中Lua腳本在魔獸世界裡的應用不僅限於做宏。
做腳本宏:
if [做這件事的條件] then
[要做的事]
else
[否則做的事]
end
即如果[做這件事的條件]成立則做[要做的事]:
if [做A事的條件] then
[A事]
elseif [做B事的條件] then
[B事]
else
[否則做的事]
end
就是先判斷[做A事的條件]是否成立,d,我們使用的插件也都是用lua腳本做出來的,謝謝,當然這個帖子是為做宏,[值2],有不足或錯誤之處請指出並輕噴,學會巧妙地繞過一些被禁用的語句。這篇文章是自己通過編程知識寫的科普掃盲貼,[變數名3]……[變數名n]=[值1],而且又有限制字數,成立就做[A事]。API庫是從網上查閱各處資料並整改而成,初學的朋友一定要仔細看好每一個字,如a=1就是把變數a的值指定為1
[變數名1],[變數名2]。
在魔獸世界lua的腳本宏中,甚至是否則做什麼事,甚至是結合按鍵精靈做出超能力的宏;script [宏語句]
來執行宏的。
由於TBC後加入的許多限制,我就不寫整個宏(一個一個在前面加/,e=14;script)了,但是理論上我們還是要一觀宏的全貌,和判斷此種功能是否能直接用宏製作出來,所以學習了lua不僅可以做到比一般宏更強大的宏,認真分析好代碼的每一個語句,[值3]……[值n]
這個語句相當於
[變數名1]=[值1]
[變數名2]=[值2]
[變數名3]=[值3]
……
[變數名n]=[值n]
比如a,就做什麼什麼事,還能做插件、基本語法
下面我對lua的基本語法作一個介紹,93:
if [做這件事的條件] then
[要做的事]
end
即如果[做這件事的條件]成立則做[要做的事]
I. Lua 腳本寫一段伺服器向客服端發送消息怎麼寫啊
用luasocket
J. 如何通過WebSocket連接伺服器進行數據傳輸
WebSocket是HTML5開始提供的一種瀏覽器與伺服器間進行全雙工通訊的網路技術。在WebSocket API中,瀏覽器和伺服器只需要做一個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以數據互相傳送。
Cocos2d-x引擎集成libwebsockets,並在libwebsockets的客戶端API基礎上封裝了一層易用的介面,使得引擎在C++, JS, Lua層都能方便的使用WebSocket來進行游戲網路通訊。
引擎支持最新的WebSocket Version 13。
在C++中使用
詳細代碼可參考引擎目錄下的/samples/Cpp/TestCpp/Classes/ExtensionsTest/NetworkTest/WebSocketTest.cpp文件。
頭文件中的准備工作
首先需要include WebSocket的頭文件。
#include "network/WebSocket.h"
cocos2d::network::WebSocket::Delegate定義了使用WebScocket需要監聽的回調通知介面。使用WebSocket的類,需要public繼承這個Delegate。
class WebSocketTestLayer : public cocos2d::Layer, public cocos2d::network::WebSocket::Delegate
並Override下面的4個介面:
virtual void onOpen(cocos2d::network::WebSocket* ws);
virtual void onMessage(cocos2d::network::WebSocket* ws, const cocos2d::network::WebSocket::Data& data);
virtual void onClose(cocos2d::network::WebSocket* ws);
virtual void onError(cocos2d::network::WebSocket* ws, const cocos2d::network::WebSocket::ErrorCode& error);
後面我們再詳細介紹每個回調介面的含義。
新建WebSocket並初始化
WebSocket.org 提供了一個專門用來測試WebSocket的伺服器"ws://echo.websocket.org"。 測試代碼以鏈接這個伺服器為例,展示如何在Cocos2d-x中使用WebSocket。
新建一個WebSocket:
cocos2d::network::WebSocket* _wsiSendText = new network::WebSocket();
init第一個參數是delegate,設置為this,第二個參數是伺服器地址。 URL中的"ws://"標識是WebSocket協議,加密的WebSocket為"wss://".
_wsiSendText->init(*this, "ws://echo.websocket.org")
WebSocket消息監聽
在調用send發送消息之前,先來看下4個消息回調。
onOpen
init會觸發WebSocket鏈接伺服器,如果成功,WebSocket就會調用onOpen,告訴調用者,客戶端到伺服器的通訊鏈路已經成功建立,可以收發消息了。
void WebSocketTestLayer::onOpen(network::WebSocket* ws)
{
if (ws == _wsiSendText)
{
_sendTextStatus->setString("Send Text WS was opened.");
}
}
onMessage
network::WebSocket::Data對象存儲客戶端接收到的數據, isBinary屬性用來判斷數據是二進制還是文本,len說明數據長度,bytes指向數據。
void WebSocketTestLayer::onMessage(network::WebSocket* ws, const network::WebSocket::Data& data)
{
if (!data.isBinary)
{
_sendTextTimes++;
char times[100] = {0};
sprintf(times, "%d", _sendTextTimes);
std::string textStr = std::string("response text msg: ")+data.bytes+", "+times;
log("%s", textStr.c_str());
_sendTextStatus->setString(textStr.c_str());
}
}
onClose
不管是伺服器主動還是被動關閉了WebSocket,客戶端將收到這個請求後,需要釋放WebSocket內存,並養成良好的習慣:置空指針。
void WebSocketTestLayer::onClose(network::WebSocket* ws)
{
if (ws == _wsiSendText)
{
_wsiSendText = NULL;
}
CC_SAFE_DELETE(ws);
}
onError
客戶端發送的請求,如果發生錯誤,就會收到onError消息,游戲針對不同的錯誤碼,做出相應的處理。
void WebSocketTestLayer::onError(network::WebSocket* ws, const network::WebSocket::ErrorCode& error)
{
log("Error was fired, error code: %d", error);
if (ws == _wsiSendText)
{
char buf[100] = {0};
sprintf(buf, "an error was fired, code: %d", error);
_sendTextStatus->setString(buf);
}
}
send消息到伺服器
在init之後,我們就可以調用send介面,往伺服器發送數據請求。send有文本和二進制兩中模式。
發送文本
_wsiSendText->send("Hello WebSocket, I'm a text message.");
發送二進制數據(多了一個len參數)
_wsiSendBinary->send((unsigned char*)buf, sizeof(buf));
主動關閉WebSocket
這是讓整個流程變得完整的關鍵步驟, 當某個WebSocket的通訊不再使用的時候,我們必須手動關閉這個WebSocket與伺服器的連接。close會觸發onClose消息,而後onClose裡面,我們釋放內存。
_wsiSendText->close();
在Lua中使用
詳細代碼可參考引擎目錄下的/samples/Lua/TestLua/Resources/luaScript/ExtensionTest/WebProxyTest.lua文件。
創建WebSocket對象
腳本介面相對C++要簡單很多,沒有頭文件,創建WebSocket對象使用下面的一行代碼搞定。 參數是伺服器地址。
wsSendText = WebSocket:create("ws://echo.websocket.org")
定義並注冊消息回調函數
回調函數是普通的Lua function,4個消息回調和c++的用途一致,參考上面的說明。
local function wsSendTextOpen(strData)
sendTextStatus:setString("Send Text WS was opened.")
end
local function wsSendTextMessage(strData)
receiveTextTimes= receiveTextTimes + 1
local strInfo= "response text msg: "..strData..", "..receiveTextTimes
sendTextStatus:setString(strInfo)
end
local function wsSendTextClose(strData)
print("_wsiSendText websocket instance closed.")
sendTextStatus = nil
wsSendText = nil
end
local function wsSendTextError(strData)
print("sendText Error was fired")
end
Lua的消息注冊不同於C++的繼承 & Override,有單獨的介面registerScriptHandler。 registerScriptHandler第一個參數是回調函數名,第二個參數是回調類型。 每一個WebSocket實例都需要綁定一次。
if nil ~= wsSendText then
wsSendText:registerScriptHandler(wsSendTextOpen,cc.WEBSOCKET_OPEN)
wsSendText:registerScriptHandler(wsSendTextMessage,cc.WEBSOCKET_MESSAGE)
wsSendText:registerScriptHandler(wsSendTextClose,cc.WEBSOCKET_CLOSE)
wsSendText:registerScriptHandler(wsSendTextError,cc.WEBSOCKET_ERROR)
end
send消息
Lua中發送不區分文本或二進制模式,均使用下面的介面。
wsSendText:sendString("Hello WebSocket中文, I'm a text message.")
主動關閉WebSocket
當某個WebSocket的通訊不再使用的時候,我們必須手動關閉這個WebSocket與伺服器的連接,以釋放伺服器和客戶端的資源。close會觸發cc.WEBSOCKET_CLOSE消息。
wsSendText:close()
在JSB中使用
詳細代碼可參考引擎目錄下的/samples/Javascript/Shared/tests/ExtensionsTest/NetworkTest/WebSocketTest.js文件。
創建WebSocket對象
腳本介面相對C++要簡單很多,沒有頭文件,創建WebSocket對象使用下面的一行代碼搞定。 參數是伺服器地址。
this._wsiSendText = new WebSocket("ws://echo.websocket.org");
設置消息回調函數
JSB中的回調函數是WebSocket實例的屬性,使用匿名函數直接賦值給對應屬性。可以看出JS語言的特性,讓綁定回調函數更加優美。四個回調的含義,參考上面c++的描述。
this._wsiSendText.onopen = function(evt) {
self._sendTextStatus.setString("Send Text WS was opened.");
};
this._wsiSendText.onmessage = function(evt) {
self._sendTextTimes++;
var textStr = "response text msg: "+evt.data+", "+self._sendTextTimes;
cc.log(textStr);
self._sendTextStatus.setString(textStr);
};
this._wsiSendText.onerror = function(evt) {
cc.log("sendText Error was fired");
};
this._wsiSendText.onclose = function(evt) {
cc.log("_wsiSendText websocket instance closed.");
self._wsiSendText = null;
};
send消息
發送文本,無需轉換,代碼如下:
this._wsiSendText.send("Hello WebSocket中文, I'm a text message.");
發送二進制,測試代碼中,使用_stringConvertToArray函數來轉換string為二進制數據,模擬二進制的發送。 new Uint16Array創建一個16位無符號整數值的類型化數組,內容將初始化為0。然後,循環讀取字元串的每一個字元的Unicode編碼,並存入Uint16Array,最終得到一個二進制對象。
_stringConvertToArray:function (strData) {
if (!strData)
returnnull;
var arrData = new Uint16Array(strData.length);
for (var i = 0; i < strData.length; i++) {
arrData[i] = strData.charCodeAt(i);
}
return arrData;
},
send二進制介面和send文本沒有區別,區別在於傳入的對象,JS內部自己知道對象是文本還是二進制數據,然後做不同的處理。
var buf = "Hello WebSocket中文,\0 I'm\0 a\0 binary\0 message\0.";
var binary = this._stringConvertToArray(buf);
this._wsiSendBinary.send(binary.buffer);
主動關閉WebSocket
當某個WebSocket的通訊不再使用的時候,我們必須手動關閉這個WebSocket與伺服器的連接,以釋放伺服器和客戶端的資源。close會觸發onclose消息。
onExit: function() {
if (this._wsiSendText)
this._wsiSendText.close();