我正在尝试通过铱星网络传输字符串,并且发送数据的成本相当大。我想知道是否有办法压缩大字符串,例如:
{"packet":01,"reporting time":1500, "altitude":6500,"latitude":0,"longitude": 0,"ballast":34,"parachute":0}
成一个更小的字符串,例如:
f5fk43d2
. 该过程必须是可逆的,以便数据可以在另一端被解码和读取。这可能吗?如果可以,我将如何去做。
我已经尝试过 jwr: Shortening a string in Java的答案,但它似乎是不可逆的。它确实将大字符串转换为较小的字符串。
该过程产生的字符串必须小于原始字符串。
任何帮助表示赞赏!
如何创建/构建/构建完全无跟踪的p2p(点对点)分布式网络架构?
如果我在不同的WAN中拥有静态IP地址和种子/对等体的种子/对等体.
我也找到了:
Torrent文件扩展名
无跟踪的torrent字典没有"announce"键.相反,无跟踪的torrent有一个"节点"键.此密钥应设置为torrent生成客户端路由表中的K个最近节点.或者,可以将密钥设置为已知的良好节点,例如由生成洪流的人操作的节点.请不要自动将"router.bittorrent.com"添加到torrent文件或自动将此节点添加到客户端路由表.
nodes = [["<host>", <port>], ["<host>", <port>], ...]
nodes = [["127.0.0.1", 6881], ["your.router.node", 4804]]
但是,我不知道我应该在哪里闪存(硬编码)这些IP地址
我一直在尝试将我的种子盒移动到Docker容器中,我认为我遇到了鸡/蛋问题:
当前的种子箱设置通过privateinternetaccess.com运行OpenVPN(所有互联网都通过VPN).我有一个脚本(https://github.com/firecat53/pia_transmission_monitor),用PIA检查分配的转发端口,然后使用端口和绑定地址相应地更新传输守护进程.
问题是每小时检查分配的转发端口,它可以随时更改...我需要在运行Docker容器之前知道端口,以便知道哪些端口要传入/传出容器.我打算在容器内运行OpenVPN,但事先不知道分配给容器的端口我不确定这是否会起作用.
一个非常 hackish的解决方案可能是在一个容器内运行OpenVPN和另一个Docker守护进程,然后在OpenVPN容器内运行传输容器.这似乎很复杂,但我还没有尝试过.
我错过了一些非常明显的东西吗?还有其他想法吗?
谢谢!
斯科特
我们正在开发一个通过蓝牙使用 SPP(串行端口配置文件)的应用程序,开发人员正在讨论使用某种类型的协议和数据包传输,还是仅在没有任何形式的 ACK、序列或大小信息的情况下流式传输数据。
蓝牙是否提供有保证的传输和数据完整性,以便我们不需要数据包协议设计的开销?
我们可以仅依靠蓝牙来确保数据传输吗?
使用{packet,4}在localhost上通过两个不同的端口传输1G数据只需要8秒,而使用{packet,raw}在30秒内无法完成相同的任务.我知道如果使用后一种方法,数据将达到数万个小块(在archlinux上大小为1460字节).我已经学习了TCP/IP协议的某些方面,并且已经思考了这个问题好几天但仍然无法弄清楚什么是确切的区别.真诚期待一些自下而上的解释.
-module(test).
-export([main/1]).
-define(SOCKOPT, [binary,{active,true},{packet,4}]).
main(_) ->
{ok, LSock} = gen_tcp:listen(6677, ?SOCKOPT),
spawn(fun() -> send() end),
recv(LSock).
recv(LSock) ->
{ok, Sock} = gen_tcp:accept(LSock),
inet:setopts(Sock, ?SOCKOPT),
loop(Sock).
loop(Sock) ->
receive
{tcp, Sock, Data} ->
io:fwrite("~p~n",[bit_size(Data)]),
loop(Sock);
{tcp_closed, Sock} -> ok
end.
send() ->
timer:sleep(500),
{ok, Sock}=gen_tcp:connect("localhost", 6677, ?SOCKOPT),
gen_tcp:send(Sock, binary:copy(<<"1">>, 1073741824)),
gen_tcp:close(Sock).
Run Code Online (Sandbox Code Playgroud)
$ time escript test.erl
8589934592
real 0m8.919s
user 0m6.643s
sys 0m2.257s
我正在使用TransmissionBT torrent客户端(http://www.transmissionbt.com/)。
是否可以对代码进行简单修改,以便能够以顺序模式(从文件开头)下载文件。这样就可以播放视频文件,而无需等待下载完整个文件。我找到了解决方案-https://trac.transmissionbt.com/wiki/Can%20I%20sequence%20the%20files%20I%20download,但这是7年前的版本,在当前版本中,链接中未提及功能。
有没有人为种子创建填充文件?如今有多少客户使用这些东西?“填充文件”是否全面?
我在诸如ctorrent,ttorent,trasmission等的新客户中没有发现此功能。
您是否具有此功能的实现或有关此功能的一些理论或历史?
我会很感激的答案!
我听说它说过一次提供完全交付几乎是不可能的。同时,据说TCP提供了有保证的交付。如果TCP不提供完全保证的一次传送,那么它将提供最多一次或至少一次
好吧,问题是我试图通过HTTP编码为base64发送一个字节数组.虽然我在另一端接收的字符串与原始字符串的大小相同,但字符串本身并不相同,因此我无法将字符串解码回原始字节数组.
另外,在发送字符串之前,我已经完成了对客户端base64的转换,一切正常.它发送后发生问题.
有什么我想念的吗?任何特定的格式类型?我尝试过使用EscapeData(),但字符串太大了.
先感谢您
编辑:代码
System.Net.WebRequest rq = System.Net.WebRequest.Create("http://localhost:53399/TestSite/Default.aspx");
rq.Method = "POST";
rq.ContentType = "application/x-www-form-urlencoded";
string request = string.Empty;
string image = Convert.ToBase64String(System.IO.File.ReadAllBytes("c:\\temp.png"));
request += "image=" + image;
int length = image.Length;
byte[] array = new UTF8Encoding().GetBytes(request);
rq.ContentLength = request.Length;
System.IO.Stream str = rq.GetRequestStream();
str.Write(array, 0, array.Length);
System.Net.WebResponse rs = rq.GetResponse();
System.IO.StreamReader reader = new System.IO.StreamReader(rs.GetResponseStream());
string response = reader.ReadToEnd();
reader.Close();
str.Close();
System.IO.File.WriteAllText("c:\\temp\\response.txt", response);
Run Code Online (Sandbox Code Playgroud)