Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 节省带宽GPRS和TCP_Sockets_Tcp - Fatal编程技术网

Sockets 节省带宽GPRS和TCP

Sockets 节省带宽GPRS和TCP,sockets,tcp,Sockets,Tcp,你好,我为我的旧windows手机制作了一个程序,每5秒钟发送一次gps数据、温度等,只是为了实验性地创建一个车队管理系统 我注意到在一小时内消耗了350kb的数据,尽管我只发送了20kb的数据 由于我对网络没有深入的了解,一个tcp连接需要多少字节 也许我应该让套接字保持活动状态,因为我每5秒关闭和打开一次。这样可以节省字节吗 MTU在这里也很重要吗? 还有其他减少开销的方法吗? 谢谢让我们在这里做一些数学题 每5秒是每小时720个连接加上数据。20K/720是每个连接大约28字节的有效负载(

你好,我为我的旧windows手机制作了一个程序,每5秒钟发送一次gps数据、温度等,只是为了实验性地创建一个车队管理系统

我注意到在一小时内消耗了350kb的数据,尽管我只发送了20kb的数据

由于我对网络没有深入的了解,一个tcp连接需要多少字节

也许我应该让套接字保持活动状态,因为我每5秒关闭和打开一次。这样可以节省字节吗

MTU在这里也很重要吗? 还有其他减少开销的方法吗?
谢谢

让我们在这里做一些数学题

每5秒是每小时720个连接加上数据。20K/720是每个连接大约28字节的有效负载(您的GPS数据)

IP and TCP headers along are 48 bytes in addition to whatever data is being sent.

3-way handshake connection: 3 packets (2 out, 1 in) == 96 bytes out and 48 bytes in
Outbound Data-packet: 48+28 bytes == 76 bytes (out)
Inbound Ack: 48 bytes (in)
Close: 48 bytes (out)
Final Ack: 48 bytes (in)

Total out per connection: 220
Total in per connection:  144
Total data send/received per connection: 220+144 = 364
Total data usage in one hour = 364 * 720 = 262K
所以我在你的数据使用估计的大概范围内

如果您希望减少带宽使用,这里有三个想法:

  • 缩小更新率

  • 不要每次都拆下插座连接。把它打开就行了

  • 如果你的GPS坐标周期性更新,你可以考虑使用UDP而不是TCP。存在数据包丢失的可能性,但考虑到您每5秒钟重新传输一次更新的数据,丢失更新的带宽不值得重新传输。IP和UDP头的组合只有28个字节,没有“连接”开销

    更新

    当我最初发布此消息时,我错误地将close连接误解为客户端和服务器之间的FIN数据包的单一交换。实际上,客户机发送FIN作为启动关闭的一部分。然后服务器确认FIN。然后服务器发送自己的FIN,该FIN由客户端确认。换句话说,每个连接额外增加96字节。重做我们的数学:

    Total data send/received per connection =
    220+48 + 144+48 = 460
    Total data usage in one hour = 460 * 720 = 331K
    

    因此,我在一小时内修正的331KB的估算值与OP看到的有点接近。

    让我们在这里做一些计算

    每5秒是每小时720个连接加上数据。20K/720是每个连接大约28字节的有效负载(您的GPS数据)

    IP and TCP headers along are 48 bytes in addition to whatever data is being sent.
    
    3-way handshake connection: 3 packets (2 out, 1 in) == 96 bytes out and 48 bytes in
    Outbound Data-packet: 48+28 bytes == 76 bytes (out)
    Inbound Ack: 48 bytes (in)
    Close: 48 bytes (out)
    Final Ack: 48 bytes (in)
    
    Total out per connection: 220
    Total in per connection:  144
    Total data send/received per connection: 220+144 = 364
    Total data usage in one hour = 364 * 720 = 262K
    
    所以我在你的数据使用估计的大概范围内

    如果您希望减少带宽使用,这里有三个想法:

  • 缩小更新率

  • 不要每次都拆下插座连接。把它打开就行了

  • 如果你的GPS坐标周期性更新,你可以考虑使用UDP而不是TCP。存在数据包丢失的可能性,但考虑到您每5秒钟重新传输一次更新的数据,丢失更新的带宽不值得重新传输。IP和UDP头的组合只有28个字节,没有“连接”开销

    更新

    当我最初发布此消息时,我错误地将close连接误解为客户端和服务器之间的FIN数据包的单一交换。实际上,客户机发送FIN作为启动关闭的一部分。然后服务器确认FIN。然后服务器发送自己的FIN,该FIN由客户端确认。换句话说,每个连接额外增加96字节。重做我们的数学:

    Total data send/received per connection =
    220+48 + 144+48 = 460
    Total data usage in one hour = 460 * 720 = 331K
    

    因此,我在一小时内修正的331KB的估计值与OP看到的有点接近。

    我发送了290个gps信息包。总共8240字节。根据计算,它应该需要约106KB。但它需要150kb。我不知道这些字节是从哪里来的我发送了290包gps信息。总共8240字节。根据计算,它应该需要约106KB。但它需要150kb。我不知道这些字节是从哪里来的