Android基于UDP语音对讲系列(一)

Android 两部手机通过UDP在局域网内通信

最近学习了一下socket通信相关的知识,决定从UDP进行文字传输开始做起。华为手机效果如图:

我的另一部是小米手机:网络IP为192.168.1.118 就不截图了,这部华为手机IP为192.168.1.102,注意上面填写的IP为接收方的IP而不是自己的IP

点击发送按钮,开始发送消息:

 1private DatagramSocket sendSocket = null;
 2private int sendPort = 8856;
 3
 4private void sendMsg() {
 5try {
 6if (sendSocket == null) {
 7sendSocket = new DatagramSocket(sendPort);
 8}
 9InetAddress inetAddress = InetAddress.getByName(tvReceiveIp.getText().toString());
10byte[] bytes = tvServiceMsg.getText().toString().getBytes();
11DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, inetAddress, receivePort);
12sendSocket.send(datagramPacket);
13mHandler.sendEmptyMessage(0);
14System.out.println("MainActivity = " + "发送成功");
15isRunning = true;
16} catch (SocketException e) {
17e.printStackTrace();
18} catch (UnknownHostException e) {
19e.printStackTrace();
20} catch (IOException e) {
21e.printStackTrace();
22}
23
24}

另一部手机点击接收,开始接收:

 1private DatagramSocket receiveSocket = null;
 2private int receivePort = 8855;
 3DatagramPacket datagramPacket;
 4private void receiveMsg() {
 5try {
 6while (isRunning) {
 7if (receiveSocket == null) {
 8receiveSocket = new DatagramSocket(receivePort);
 9}
10byte[] bytes = new byte[1024];
11datagramPacket= new DatagramPacket(bytes, 0, bytes.length);
12receiveSocket.receive(datagramPacket);
13mHandler.sendEmptyMessage(1);
14
15System.out.println("Main2Activity接收成功 = " + new String(datagramPacket.getData()));
16}
17
18} catch (SocketException e) {
19e.printStackTrace();
20} catch (IOException e) {
21e.printStackTrace();
22}
23
24}


发送和接收到的消息通知主线程刷新:

 1Handler mHandler = new Handler() {
 2@Override
 3public void handleMessage(Message msg) {
 4super.handleMessage(msg);
 5switch (msg.what) {
 6case 0:
 7creatMessageBean(tvServiceMsg.getText().toString(), true);
 8break;
 9case 1:
10creatMessageBean(new String(datagramPacket.getData()), false);
11break;
12}
13}
14};

构造message对象

1private void creatMessageBean(String msg, boolean isSend) {
2MessageBean messageBean = new MessageBean(msg, isSend);
3mAdapter.setData(messageBean);
4}

这样一个简单的通信demo就完成了,当然在demo中我没有做严谨的校验,只是为了实现整个流程

因为此系列的目的是实现音频的传输,所以下一篇会先研究音频的录制。

QQ群:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stormxiaofeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值