gpt4 book ai didi

tcp - 在 erlang 中使用 tcp 发送原始二进制文件

转载 作者:可可西里 更新时间:2023-11-01 02:35:03 25 4
gpt4 key购买 nike

我在 erlang 中有一个使用 tcp 的基本客户端服务器。

如何将文件中的实际二进制数据发送给请求它的客户端?

文件是如何分段发送的?

我有这个代码

{好的,套接字} =
gen_tcp:connect({Ip}, 2345,
[二进制, {数据包, 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).

所以只要你的文件小于4Gb,你就可以发送

{ok, File} = file:read_file(FileName),
gen_tcp:send(Socket, File).

在接收端:

File = gen_tcp:recv(Socket, 0).

由于 {packet, 4} 框架,您将获得完整的文件。

关于tcp - 在 erlang 中使用 tcp 发送原始二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4081502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com