我需要每隔一分钟左右从100个左右的安卓手机发送小数据串数据到某种服务器。问题是我使用的每个MB大约是1.5美元,所以如果数据量太大,成本会大大增加。
我尝试过使用post,但每个字符串发送时使用了400字节的数据。我试图建立一个C#套接字服务器,客户端连接,发送数据和断开连接,但它仍然使用400字节的数据,也许更多......这怎么可能? netbalancer可能会测量错误吗?我在c#中使用了client.Send(“string”)。
如果我是通过移动数据手机进行操作会有什么不同吗?我正在局域网中的另一台笔记本电脑上。
我也试过ftp,它也太臃肿了。
我需要发送的每个字符串的网络消耗大约在100-120字节左右,这是否可能?我可以使用哪些工具? --- ---更新
这是C#客户端代码(如果我找到如何优化大小,将是Java)
// Read the first batch of the TcpServer response bytes.
Int32 port = 10000;
byte[] bytes = Encoding.ASCII.GetBytes("0001#37.12489#-106.35871");
TcpClient client = new TcpClient("192.168.15.16", port);
int bytesSent = client.Client.Send(bytes);
client.Close();
这是在XAMPP上运行的PHP套接字。我可以使用任何语言编写它,因为我可能不得不将它用作不允许套接字的服务器的中继。
<?php
error_reporting(E_ALL);
/* Allow the script to hang around waiting for connections. */
set_time_limit(0);
/* Turn on implicit output flushing so we see what we're getting
* as it comes in. */
ob_implicit_flush();
$address = 'xxx.xxx.xx.xx';
$port = 10000;
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false)
{
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
}
if (socket_bind($sock, $address, $port) === false)
{
echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}
if (socket_listen($sock, 5) === false)
{
echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}
do
{
if (($msgsock = socket_accept($sock)) === false)
{
echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
break;
}
$buf = socket_read($msgsock,50);
socket_close($msgsock);
echo "$buf\n";
} while (true);
socket_close($sock);
?>
答案 0 :(得分:0)
创建一个最小协议来检测数据包丢失并允许重新获取数据包。
一个想法:
为每个数据包添加序列号。保留发送方发送的最小数据包数。允许发件人从接收者接收答案。让接收方发送请求让发送方重新发送任何序列号丢失。
这将允许填补空白,这是在由发件人保留的数据包数量定义的时间窗口期间引入的。
对于序列号,每个数据包可能有一个附加字节,两个字节肯定就足够了。但是,最大序列号(以及它的大小)取决于发送者保存的历史数据包的最大数量,以便能够重新发送它们。