Android UDP广播无法发送数据

lbzhang_upc 2013-08-26 04:35:04
Debug调试在socket.send(packet);出错,求解。。。。
class ClientClass extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
try {
InetAddress serverAddress=InetAddress.getByName("255.255.255.255");
int messageCount=0;
DatagramSocket socket=new DatagramSocket();
byte[] buffer=localIpAddress.getBytes();
DatagramPacket packet=new DatagramPacket(buffer,buffer.length,serverAddress,4567);
while (true) {
try {
socket.send(packet);
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println("Send Data:" + new String(packet.getData()));
Toast.makeText(MainActivity.this, "数据已发送!", Toast.LENGTH_SHORT).show();
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
messageCount++;
buffer = (localIpAddress + messageCount).getBytes();
packet.setData(buffer,0,buffer.length);
}

} catch (Exception e) {
// TODO: handle exception
Toast.makeText(MainActivity.this, "数据未能发送!", Toast.LENGTH_SHORT).show();
}
super.run();
}
}
...全文
404 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈哈gogo 2014-04-18
  • 打赏
  • 举报
回复
解决了,其实错误仅仅在于一个toast的使用上,android规定,不可以在其他线程中直接操作UI控件,因此当我使用toast这个UI控件是就会报错,同时还有另外一点是对于网络操作,android规定一定要开辟新线程,否则肯定会报错,无论如何谢谢几位了。分给你们了。
Leson_Yin 2013-12-17
  • 打赏
  • 举报
回复
是的。。如果要更新ui 主线程,用 Handler 、、、
lbzhang_upc 2013-09-15
  • 打赏
  • 举报
回复
解决了,其实错误仅仅在于一个toast的使用上,android规定,不可以在其他线程中直接操作UI控件,因此当我使用toast这个UI控件是就会报错,同时还有另外一点是对于网络操作,android规定一定要开辟新线程,否则肯定会报错,无论如何谢谢几位了。分给你们了。
lth213 2013-08-28
  • 打赏
  • 举报
回复
貌似地址不能这样滴,一般都是最后一个字段是255,前面跟局域网地址一样。建议下个网络调试助手,先测试下,再看是不是代码的问题
凉凉二点凉 2013-08-27
  • 打赏
  • 举报
回复
引用 3 楼 zhanglianbo2 的回复:
[quote=引用 2 楼 guoyoulei520 的回复:] 255.255.255.255你这个server地址对吗?哪有地址是这样的
当Android使用socket UDP进行广播时就是需要使用这个IP地址。[/quote] 难道必须用255.255.255.255,有这种IP地址????client怎么把包发送到服务器端呢? 建议你换成server的ip
lbzhang_upc 2013-08-27
  • 打赏
  • 举报
回复
引用 2 楼 guoyoulei520 的回复:
255.255.255.255你这个server地址对吗?哪有地址是这样的
当我使用Debug进行调试时显示在DatagramPacket packet=new DatagramPacket(buffer,buffer.length,serverAddress,4567);这一条代码出错,试过好多程序,总是在这一行出错跳出。。。
lbzhang_upc 2013-08-27
  • 打赏
  • 举报
回复
引用 2 楼 guoyoulei520 的回复:
255.255.255.255你这个server地址对吗?哪有地址是这样的
当Android使用socket UDP进行广播时就是需要使用这个IP地址。
凉凉二点凉 2013-08-27
  • 打赏
  • 举报
回复
255.255.255.255你这个server地址对吗?哪有地址是这样的
荒颜 2013-08-27
  • 打赏
  • 举报
回复
代码没看出问题 换ip 改端口 多试试
lbzhang_upc 2013-08-27
  • 打赏
  • 举报
回复
引用 5 楼 guoyoulei520 的回复:
[quote=引用 3 楼 zhanglianbo2 的回复:] [quote=引用 2 楼 guoyoulei520 的回复:] 255.255.255.255你这个server地址对吗?哪有地址是这样的
当Android使用socket UDP进行广播时就是需要使用这个IP地址。[/quote] 难道必须用255.255.255.255,有这种IP地址????client怎么把包发送到服务器端呢? 建议你换成server的ip[/quote] 使用UDP发送数据,只管发,不管对方有没有收到,所以原则上讲是,不管ip如何都应当可以发出去,我也试过其他的ip但是错误一样。
这两天下了一个使用UDP传输目录内文件的程序,发出来给大家一起看看,共同进步。有问题请指教。 由于udp丢包比较厉害,因此使用了自定义的内部协议,进行双方的确认。 程序跑起来后,看网络状况,有时候会一卡一卡的。 以下是程序说明: * 本程序集成了数据导出端(服务器端)和数据导入端(客户端),使用UDP进行文件传递 * 服务器端的文件来源目录,见Tools中SOURCEPATH的设置 * 客户端的文件保存目录,见Tools中DESTINATIONPATH的设置,可以根据自己需要进行调整 * * 由于UDP存在丢包问题,因此Server和Client的通讯需要来回包进行确认,协议包头如下: * 1. "55 aa 99 01",表示客户端发起广播请求,请求服务器响应 * 2. "55 aa 99 02 + 服务器的设备名称",表示服务器接收到广播后,响应客户端请求,把此包指定IP发送客户端(此指定IP地址可以UDP广播信息包中获取) * 3. "55 aa 99 03",表示客户端接收到服务器的响应,接着向服务器指定IP请求:需要传递的文件总数目和文件总容量(单位为KB) * 4. "55 aa 99 04 + 4字节文件总数目和4字节的文件总容量",表示服务器接收到客户端的0x03请求,统计SOURCEPATH中的所有文件数目和文件总容量,发送指定IP地址的客户端 * 5. "55 aa 99 05",客户端接收到文件总数目和文件总容量,请求服务器发送文件具体内容 * 6. "55 aa 99 10 + 文件名称",服务器发送文件名称 * 7. "55 aa 99 11",客户端响应,表示接收到服务器发送的0x10包 * 8. "55 aa 99 12+文件内容",服务器端发送具体文件内容 * 9. "55 aa 99 13",客户端响应,表示接收到服务器发送的0x12包 * 10."55 aa 99 14",服务端高速客户端发送完毕 * * 注意:服务器发送0x10包后,收到客户端的0x11响应包,将把文件具体内容拆分成N个0x12包,每个包的大小见Tools.byteSize的设置,目前设置为10K, * 服务器没收到一个0x13响应包,才能继续发下一个0x12包,已放置UDP的丢包,另外每个0x12包最多发送10次而无0x13包的响应,则发送进程结束,界面提示 * * 本程序已经封装好,调用见TransportFilesActivity.java文件
目录 第一篇 Android开发初步 第1章 Android初识 1.1 Android简介 1.1.1 认识Android 1.1.2 Android系统框架 1.1.3 应用程序框架 1.2 Eclipse开发环境 1.2.1 安装ADT插件 1.2.2 安装SDK 1.2.3 配置源代码 1.2.4 创建AVD 1.3 Android模拟器 1.3.1 ADB工具 1.3.2 其它常用工具 1.4 本章小结 第2章 应用程序构建 2.1 创建Android工程 2.2 HelloAndroid详解 2.2.1 程序结构 2.2.2 代码分析 2.3 权限permission 2.4 LogCat日志调试 2.5 示例练习 2.5.1 登录界面 2.5.2 事件处理 2.6 本章小结 第二篇 Android开发关键组件 第3章 Activity(活动) 3.1 什么是任务 3.2 Activity的生命周期 3.3 基本用法 3.3.1 创建Activity 3.3.2 启动Activity 3.3.3 窗口Activity 3.3.4 Activity生命周期验证 3.4 Activity之间通信 3.4.1 Activity传递一般类型 3.4.2 Activity传递对象类型 3.4.2 Activity回传数据 3.5 Activity加载模式 3.6 本章小结 第4章 Intent (意图) 4.1 显式Intent 4.2 隐式Intent 4.2.1 IntentFilter 4.2.2 调用系统组件 4.3 本章小结 第5章 BroadcastReceiver (广播) 5.1 生命周期 5.2 广播类型 5.2.1 普通广播 5.2.2 有序广播 5.2.3 异步广播 5.3 系统广播应用 5.3.1 系统广播 5.3.2 开机启动程序 5.3.3 电量监测 5.4 本章小结 第6章 Service(服务) 6.1 生命周期 6.2 Binder机制 6.3 AIDL基础 6.3.1 定义AIDL接口 6.3.2 使用AIDL开发程序的一般步骤 6.3.3 实现远程控制计数器示例 6.4 AIDL深入练习 6.4.1 服务端实现 6.4.2 客户端实现 6.5 系统服务 6.5.1 获得系统服务 6.5.2 获取屏幕分辨率 6.5.3 剪贴板服务 6.5.4 电话服务 6.5.5 定时提醒服务 6.5.6 音频服务 6.5.7 传感器服务 6.5.8 位置服务 6.6 本章小结 第三篇 Android开发基础详解 第7章 常用控件 7.1 Button(按钮) 7.2 ImageButton(图片按钮) 7.3 ToggleButton(开关按钮) 7.4 TextView(文本视图) 7.5 ImageView(图片视图) 7.6 EditText(编辑框) 7.7 RadioButton(单选按钮) 7.8 CheckBox(多选框) 7.9 Spinner(下拉列表) 7.10 AutoCompleteTextview(自动完成) 7.11 DataPicker&TimePicker;(日期&时间) 7.12 ProgressBar (进度条) 7.12.1 横向进度条 7.12.2 旋转型进度条 7.13 SeekBar (拖动条) 7.14 RatingBar(评分条) 7.15 本章小结 第8章 界面布局 8.1 基本布局 8.1.1 线性布局 8.1.2 相对布局 8.1.3 绝对布局 8.1.4 Frame布局 8.1.5 表格布局 8.2 Tab布局 8.3 ScrollView 8.4 ListView(列表) 8.4.1 继承自ListActivity 8.4.2 ListView灵活运用 8.5 GirdView(网格) 8.6 WebView(网页) 8.6.1 WebView加载web页面 8.6.2 WebView中对JavaScript的支持 8.7 Gallery (画廊) 8.8 SlidingDrawer(滑动抽屉) 8.9 Dialog(对话框) 8.9.1 AlertDialog警告框 8.9.2 ProgressDialog进度框 8.9.3 DatePickerDialog & TimePickerDialog(日期时间选择框) 8.10 Menu(菜单) 8.10.1 options menu 8.10.2 contex

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧