大家。我是网络编程的初学者。目前,我想做一个从Android手机向Ubuntu服务器发送文件(~2M字节)的实验。如何以最高速度发送?我尝试过在Java中使用Bufferedreader,从文件中读取每个字节并通过套接字“outputstream write”函数将该单个字节发送到服务器。这种方式似乎花费了太多时间。我注意到,如果在相同的网络条件下,我使用一些立即信使工具(如Skype)发送相同的文件;它比我快得多。有人知道那些Immediate Messenger软件下面的API或实现协议吗?
我可能需要调用除socket之外的其他有效API吗?我也试图将整个文件读入一个字节数组,然后调用“套接字写入”函数将巨大的字节数组发送到服务器一次。虽然当我在服务器端收到它时发现有很多在我的原始数据中分配的“填充零”,整个传输似乎比“单字节传输”方法花费更少的时间。有人对此有任何建议吗?非常感谢!
答案 0 :(得分:1)
感谢大家的回答。我想我只是犯了一个愚蠢的错误。我使用TCP套接字传输速度慢的真正原因是每次我只读出文件中的一个字节并调用" void write(int b)"将此单个字节发送到服务器。此方法非常耗时。现在,每当我尝试从文件中读取256个字节并通过" void write(byte [] b,int off,int len)&#34 ;;这样传输这两个256字节时,传输速度非常快因此,这不是TCP本身的问题。调用错误的API是我的错误。我还没试过UDP。但我认为这也是一个不错的选择。谢谢大家。
答案 1 :(得分:0)
如果您的连接足够好(损失很少),那么发送TCP / IP的最快方式就是通过UDP; y需要实现数据包序列,以便发送方为数据包添加序列号,接收器跟踪丢失的数据包,并在发送所有数据后再次请求它们。收到所有数据后,接收方可以重新组装完整的文件。
这是TCP over UDP的简单实现。