设为首页 加入收藏

TOP

Erlang_Demo
2014-11-23 22:19:22 来源: 作者: 【 】 浏览:1
Tags:Erlang_Demo
//socket基本应用
//erlang程序基本写法
-module(vpl).
-export[(run/2)].

-define(IP,"127.0.0.1").
-define(PORT,1777).

run(ThreadCount,MsgCount)->
CurrentThreadNo = -1,
CurrentMsgNo = -1,
swpan_thread(CurrentThreadNo,CurrentMsgNo,ThreadCount,MsgCount).

swpan_thread(CurrentThreadNo,CurrentMsgNo,ThreadCount,MsgCount)->
NewThreadNo = CurrentThreadNo + 1,
if
NewThreadNo == ThreadCount ->
ok;
NewThreadNo < ThreadCount ->
RetryCount = 3,
spawn(fun() ->
connect_vsp(NewThreadNo,MsgCount,RetryCount)
end),
swpan_thread(NewThreadNo,CurrentMsgNo,ThreadCount,MsgCount)
end.

connect_vsp(NewThreadNo,MsgCount,RetryCount)->
case gen_tcp:connect( IP, PORT,[binary]) of
{ok,Socket} ->
io:fwrite("connect success! ThreadNo=~w~n",[NewThreadNo]),
TransId = 0,
send_msg(Socket,MsgCount,TransId,NewThreadNo);
{error,Reason} ->
io:fwrite("connect failed Error=~s,ThreadNo=~w~n !",[Reason,NewThreadNo]),
NewRetryCount = RetryCount - 1,
if
NewRetryCount > 0 ->
io:fwrite("reconnect ThreadNo=~w,RetryTime=~w~n",[NewThreadNo,NewRetryCount]),
connect_vsp(NewThreadNo,MsgCount,NewRetryCount);
NewRetryCount == 0 ->
io:fwrite("reconnect ThreadNo=~w Reach Retry Max! ~n",[NewThreadNo])
end
end.

send_msg(Socket,MsgCount,TransId,NewThreadNo)->
MsgContentBin = <<"TestContent">>,
Len = string:len(binary_to_list(MsgContentBin)),
%%packet head
MsgType = 16#222,
Version=1,
ReserveInt=0,

SendMsg = binary_to_list(<>) ++ binary_to_list(MsgContentBin),

if
MsgCount == 0 ->
ok = gen_tcp:close(Socket),
io:fwrite("test over ThreadNo=~w~n",[NewThreadNo]);
MsgCount > 0 ->
NewMsgCount = MsgCount - 1,
NewTransId = TransId + 1,
case gen_tcp:send(Socket,SendMsg) of
ok ->
receive_data(Socket,NewMsgCount,NewTransId,NewThreadNo);
{error,Reason}->
io:fwrite("send failed ~s~n !",[Reason])
end
end.

receive_data(Socket,NewMsgCount,NewTransId,NewThreadNo) ->
receive
{tcp,Socket,Bin} ->
<> = Bin,
io:fwrite("~w ~.16B ~n",[RecvLen,RecvMsg]),
send_msg(Socket,NewMsgCount,NewTransId,NewThreadNo);
{tcp_closed,Socket}->
io:fwrite("close~n")
end.
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇新手指南-序列化篇之二 下一篇新手指南-序列化篇之一

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: