Octave Sockets Package,如何接收大数据流
Octave Sockets Package, how to receive large data streams
我在使用 Octave 时仍有问题。我需要通过网络套接字连接接收大型(> 10M)图像,处理数据并将其发回。我在 Windows 7 中使用 Octave 4.2.1,套接字包是 1.2.0 版,可以在这里找到:https://octave.sourceforge.io/sockets/
这是最简单的代码示例:
pkg load sockets;
rcv_sck=socket(AF_INET, SOCK_STREAM, 0);
bind(rcv_sck,12345);
a=listen(rcv_sck,0);
b=accept(rcv_sck);
data = [];
bufflen = 4600;
total = 0;
count = 0;
while (total < 10000)
[buff,count]=recv(b, bufflen);
data = horzcat(data, buff);
total += count;
endwhile
disconnect (b);
disconnect (rcv_sck);
fileID = fopen('data.jpg','w');
fwrite('data.jpg', data);
fclose(fileID);
imshow ('data.jpg')
可以用netcat测试
ncat.exe 127.0.0.1 12345 < test.jpg
我的问题是,我无法接收大于 4608 字节的数据。如果我发送更多数据,接收数组将被切割成这个大小。这就是为什么我选择 4600 字节作为缓冲区长度。现在我尝试将小数据块的块放在一起以获得正确的数据。
但这有两个严重的问题:
1) 我必须知道我要发送的数据的大小,这个问题可以通过先将大小作为参数发送来解决。在我的示例中,我将大小设置为 10000 字节。
2) 更重要的是:它非常慢。对于 170kB 的 jpeg,发送数据需要 7 秒。
非常感谢任何提示或提示,谢谢。
一月
如果您想在断开连接之前读取数据,我建议
data = recv (b, Inf, MSG_WAITALL);
没有任何循环或 horcat。在您的客户端 (netcat) 使用 -q0:
netcat.exe -q0 localhost 12345 < test.jpg
顺便说一句,如果你想把它存储在服务器端,你为什么不使用
system ("netcat -l -p 12345 > data.jpg");
第一?
我在使用 Octave 时仍有问题。我需要通过网络套接字连接接收大型(> 10M)图像,处理数据并将其发回。我在 Windows 7 中使用 Octave 4.2.1,套接字包是 1.2.0 版,可以在这里找到:https://octave.sourceforge.io/sockets/
这是最简单的代码示例:
pkg load sockets;
rcv_sck=socket(AF_INET, SOCK_STREAM, 0);
bind(rcv_sck,12345);
a=listen(rcv_sck,0);
b=accept(rcv_sck);
data = [];
bufflen = 4600;
total = 0;
count = 0;
while (total < 10000)
[buff,count]=recv(b, bufflen);
data = horzcat(data, buff);
total += count;
endwhile
disconnect (b);
disconnect (rcv_sck);
fileID = fopen('data.jpg','w');
fwrite('data.jpg', data);
fclose(fileID);
imshow ('data.jpg')
可以用netcat测试
ncat.exe 127.0.0.1 12345 < test.jpg
我的问题是,我无法接收大于 4608 字节的数据。如果我发送更多数据,接收数组将被切割成这个大小。这就是为什么我选择 4600 字节作为缓冲区长度。现在我尝试将小数据块的块放在一起以获得正确的数据。
但这有两个严重的问题:
1) 我必须知道我要发送的数据的大小,这个问题可以通过先将大小作为参数发送来解决。在我的示例中,我将大小设置为 10000 字节。
2) 更重要的是:它非常慢。对于 170kB 的 jpeg,发送数据需要 7 秒。
非常感谢任何提示或提示,谢谢。
一月
如果您想在断开连接之前读取数据,我建议
data = recv (b, Inf, MSG_WAITALL);
没有任何循环或 horcat。在您的客户端 (netcat) 使用 -q0:
netcat.exe -q0 localhost 12345 < test.jpg
顺便说一句,如果你想把它存储在服务器端,你为什么不使用
system ("netcat -l -p 12345 > data.jpg");
第一?