cococococos 2 d-x 3.xパッケージのsocket方法
4717 ワード
Coco 2 d-x 3.2バージョンでは、Lual Socketを統合しています。プログラムの中で直接にluaSocketを呼び出して、便利なTCP/UDP/FTP/HTTPなどの通信ができます。とても便利です。
下のコードを先に書きます。
view source print
下のコードを先に書きます。
view source print
01.
local socket = require(
"socket"
)
02.
local host =
"115.28.*.*"
03.
local port =
8890
04.
local c = socket.tcp()
05.
--c:settimeout(
5
)
06.
local n,"font-family: Arial, Helvetica, sans-serif;"
>e
"font-family: Arial, Helvetica, sans-serif;"
・> = c:connect(host, port)
07.
print(
"connect return:"
,n,e)-- n ,n
1
・ n nil
08.
c:send(
"Hello"
)
09.
while
true
do
10.
local response, receive_status=c:receive()
11.
--print(
"receive return:"
,response or
・"nil"
,receive_status or
"nil"
)
12.
if
receive_status ~=
"closed"
then
13.
if
response then
14.
print(
"receive:"
..response)
15.
end
16.
else
17.
break
18.
end
19.
end
20.
end
このコードはTCPのリンクを して、サーバーのように「ハロー」を しました。そして、プロセスをブロックしてサーバメッセージを ちました。
ブロックというと、マルチプロセスに せざるを ません。そして、LUAではマルチスレッドを うとLUAの が に します。
ここでLuaual Socketはいい を しています。c:settimeout(0)
このような をすると、プログラムはブロックされず、scheduleでループして すればいいです。
の のプログラムの の を します。
view source print01.
function socketInit()
02.
local socket = require(
"socket"
)
03.
local host =
"115.28.*.*"
04.
local port =
8890
05.
G_SOCKETTCP = socket.tcp()
06.
local n,e = G_SOCKETTCP:connect(host, port)
07.
print(
"connect return:"
,n,e)
08.
G_SOCKETTCP:settimeout(
0
)
09.
end
10.
function socketClose()
11.
G_SOCKETTCP:close()
12.
end
13.
function socketSend(sendStr)
14.
G_SOCKETTCP:send(sendStr)
15.
end
16.
function socketReceive()
17.
local response, receive_status=G_SOCKETTCP:receive()
18.
--print(
"receive return:"
,response or
・"nil"
,receive_status or
"nil"
)
19.
if
receive_status ~=
"closed"
then
20.
if
response then
21.
print(
"Receive Message:"
..response)
22.
--
23.
end
24.
else
25.
print(
"Service Closed!"
)
26.
end
27.
end
その 、プログラムで び しを えばいいです。
view source print01.
socketInit()
02.
local timePassed =
0
03.
local function myHandler(dt)
04.
timePassed= timePassed + dt
05.
if
timePassed >
0.1
then
06.
socketReceive()
07.
timePassed=
0
08.
end
09.
end
10.
self:scheduleUpdateWithPriorityLua(myHandler,
1
)
11.
--print(self.roomType)
12.
local jsonStr=getRoomInformationJson(self.roomType)
13.
print(jsonStr)
14.
socketSend(jsonStr)