开发Android手机间UDP传输数据系统要慎重
开发Android手机间UDP传输数据系统要慎重
Tips:
1 手机UDP同固定ip计算机通信问题不大,但是也会略微丢包,这里的问题实在抓不到原因,觉得Android网络层的UDP实现上面是不是有特殊考虑。
2 手机UDP同手机UDP通信基本不靠谱,所以手机见通过RTP发送数据包进行视频传输,非常不靠谱,会莫名其妙的收不到数据,过一会又能莫名其妙的收到数据。目前我们没有找到原因。
3 如果要手机间RTP视频,通过服务器中转RTP数据包是可以的。
贴个客户端:
package com.jouhu.udptestclient;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class UDPTestClientActivity extends Activity {
/** Called when the activity is first created. */
public EditText et;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.button1);
et = (EditText)findViewById(R.id.editText1);
et.setText("5006");
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data = "just a test";
// TODO Auto-generated method stub
DatagramSocket socket;
try {
socket = new DatagramSocket();
//socket.setBroadcast(true);
InetAddress serverIP = InetAddress.getByName("192.168.1.109");
DatagramPacket packet = new DatagramPacket(data.getBytes(), data.length(),serverIP,Integer.parseInt(et.getText().toString()));
socket.send(packet);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}
服务器端采用了Handler+线程模型,我将单独写博来阐述,这是一个比较通用的模型,可以解决线程同UI间通信的问题。
-END-
本文同发地址:http://doandroid.info/2012/03/14/%E5%BC%80%E5%8F%91android%E6%89%8B%E6%9C%BA%E9%97%B4udp%E4%BC%A0%E8%BE%93%E6%95%B0%E6%8D%AE%E7%B3%BB%E7%BB%9F%E8%A6%81%E6%85%8E%E9%87%8D/
欢迎转载,注明出处。
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个 java 空指针异常的解决过程
· 揭开 SQL Server 和 PostgreSQL 填充因子的神秘面纱
· 没有调度器的协程不是好协程,零基础深入浅出 C++20 协程
· 别做抢活的导演:代码中的抽象层次原则
· 从 Redis 客户端超时到 .NET 线程池挑战
· 会Vibe Coding的同事:我一个人干掉整个技术部!
· 回答准确率从60%飙至95%!AI知识库救命方案
· 揭开SQL Server和PostgreSQL填充因子的神秘面纱
· dotnetty 内存泄漏的BUG修复了
· 20250709 - GMX V1 攻击事件: 重入漏洞导致的总体仓位价值操纵