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();
}
}
...全文
441 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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文件

80,472

社区成员

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

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