Java UDP Socket

36 篇文章 0 订阅

Java UDP Socket使用2个class: DatagramSocket and DatagramPacket

在DatagramSocket中並不區分ServerSocket和ClientSocket,调用send方法的就相当于socket client,调用receive方法的就相当于socket server。


调用DatagramSocket 的receive方法时,程序就一直停留在receive這個位置,不再往下執行,直到接收到数据(这和ServerSocket是一样的)。因此应该另起一个thread来call receive method。


参考文档:http://big5.webasp.net/article/17/16696.htm


UDP broadcast:该功能只能向在同一个局域网里的devices/PCs来broadcast message。

其原理是:通过DatagramSocket 来send message to局域网的broadcast address “255.255.255.255”。代码是:

	private void sendUdpMessage() {
		String message = "hello world";
		try {
			DatagramSocket socket = new DatagramSocket(4545);
			socket.setBroadcast(true);
			InetAddress serverAddr = InetAddress.getByName("255.255.255.255");
			DatagramPacket packet = new DatagramPacket(message.getBytes(),
					message.length(), serverAddr, PORT);
			socket.send(packet);
			socket.close();
		} catch (Exception e) {
			Log.e("Error", e.toString());
		}

	}

不过如果你是以一部手机作为路由器,其他手机通过它组成局域网来进行UDP broadcast时,上面的代码有时灵,有时不灵。例如,我用三步手机: LG P990 (android 2.2),SONY XPEDIA RAY (android 2.3) and samsung nexus (android 4)。samsung nexus有sim卡,可以3g上网,以它为路由器,另2部连接到它组成局域网。那么当lg p990用上述方法发送udp message时,3部都可以收到。但用nexus发送udp message时,只有它自己收到,用sony发送时,则sony和nexus收到,lg收不到。难道是只能从低版本的android手机发到高版本的android手机才能收到????搞不懂!


参考文档:

http://code.google.com/p/boxeeremote/wiki/AndroidUDP

http://code.google.com/p/boxeeremote/wiki/UsingBoxeeRemote

http://kkito.cn/index.php/blog/getArticle/183/java%E5%88%A9%E7%94%A8udp%E5%AE%9E%E7%8E%B0%E5%B9%BF%E6%92%AD

http://blog.xuite.net/ffc99a3b/ooxx/42960121-%5B%E8%BD%89%E8%BC%89%5DAndroid+UDP+Broadcast+Socket


udp broadcast over 3g

http://stackoverflow.com/questions/8525867/android-broadcasting-over-3g

http://stackoverflow.com/questions/7363530/android-3g-udp-broadcast




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值