我在erlang中有一个使用tcp的基本客户端服务器.
如何将文件中的实际二进制数据发送给请求它的客户端?
如何将文件分块发送?
我有这个代码
{ok, Socket} =
gen_tcp:connect({Ip}, 2345,
[binary, {packet, 4}]),
这个{packet,4}是否处理双向发送的数据大小?
此外,客户端如何接收数据然后对其执行某些操作?喜欢将它保存到文件中?
谢谢
是 - {packet, 4}将导致erlang在接收时要求一个4字节无符号大端整数长度值的数据包帧,并在每个发送数据包之前发出一个.
您可以通过调用在套接字上发送数据gen_tcp:send(Socket, Data).这将做类似的事情:
RawData = iolist_to_binary(Data),
Length = byte_size(RawData),
Packet = <<Length:32/big-unsigned-integer, RawData/binary>>,
send(Socket, Packet).
Run Code Online (Sandbox Code Playgroud)
所以如果您的文件小于4Gb,您可以通过执行来发送它
{ok, File} = file:read_file(FileName),
gen_tcp:send(Socket, File).
Run Code Online (Sandbox Code Playgroud)
在接收端:
File = gen_tcp:recv(Socket, 0).
Run Code Online (Sandbox Code Playgroud)
由于{packet, 4}框架,您将获得完整的文件.