문제를 해결하기 위해이 코드를 작성합니다.
파일 이름으로 30 바이트를 보냅니다.
파일 이름이 < 인 경우 흰색 글씨로 채우기를 사용합니다.
file_name_receiver(Socket)->
{ok,FilenameBinaryPadding}=gen_tcp:recv(Socket,30),
FilenamePadding=erlang:binary_to_list(FilenameBinaryPadding),
Filename = string:strip(FilenamePadding,both,$),
file_receiver_loop(Socket,Filename,[]).
이 기능은 바이너리 데이터 파일을 riceive :
file_receiver_loop(Socket,Filename,Bs)->
io:format("~nRicezione file in corso~n"),
case gen_tcp:recv(Socket, 0) of
{ok, B} ->
file_receiver_loop(Socket, Filename,[Bs, B]);
{error, closed} ->
save_file(Filename,Bs)
end.
마지막으로,이 기능은 파일을 저장할 파일 이름을받는 연결이 나는 기능 file_name_receiver (소켓)를 호출 수락
.
%%Permette l'invio di un file specificando host,filename e path assoluto
send_file(Host,Filename,FilePath,Port)->
{ok, Socket} = gen_tcp:connect(list_to_atom(Hostname), Port, TCP_OPTIONS_CLIENT),
FilenamePadding = string:left(Filename, 30, $), %%Padding with white space
gen_tcp:send(Socket,FilenamePadding),
Ret=file:sendfile(FilePath, Socket),
ok = gen_tcp:close(Socket).
:
%%salva il file
save_file(Filename,Bs) ->
io:format("~nFilename: ~p",[Filename]),
{ok, Fd} = file:open("../script/"++Filename, write),
file:write(Fd, Bs),
file:close(Fd).
발신자 간단한 함수를 사용