Android UDP通信的成败判断

在Android开发中,使用UDP通信时,如何确定连接的成功或失败是一个挑战。通常,通过服务器响应ACK来确认连接建立。若要检测失败,可以设定DatagramSocket的超时时间,如果在指定时间内未接收到消息,则视为通信失败。setSoTimeout()方法能帮助设置这个超时值,当超过超时时间未收到数据时,会抛出SocketException。
摘要由CSDN通过智能技术生成

最近在 Android 开发的时候遇到一个问题,就是在服务器与客户端采用UDP协议通信的时候,如何判断一开始双方建立了连接。

“连接建立”很容易实现,服务器受到命令,返回类似ACK等信息,客户端使用 DatagramSocket.receive() 方法接收信息,即可知道双方已完成一次交互,通信成功。而要判断“连接失败”,即客户端在 DatagramSocket.receive() 这一步就会产生阻塞。

想了两个解决方法,一是设计一个定时器,规定 DatagramSocket.receive() 在一定时间内没有接收到消息则认为通信失败;一是客户端主动去扫描服务器的IP及端口,确认服务器是存在并启动的。

后来找了一下资料,发现 DatagramSocket 存在方法 setSoTimeout(),该方法已经帮我们设置好一个定时器,超过规定超时值,就会 抛出 SocketException。

以下是客户端的部分代码

private void sendMessage(String str) {
        		try {     
        			DatagramSocket socket =new DatagramSocket();  
        			InetAddress serverAddress = InetAddress.getByName(Settings.ipnum);
        			byte data[] = str.getBytes();
        		
        			DatagramPacket outPacket = new DatagramPacket(data, data.length,
        					serverAddress, Settings.socketnum);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值