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

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

c4fc5127ed00afb29a15dc7774af51c1.png

我的另一部是小米手机:网络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群:

更多推荐