(一)Android 兩部手機通過UDP在局域網(wǎng)內(nèi)通信

最近學(xué)習(xí)了一下socket通信相關(guān)的知識,決定從UDP進行文字傳輸開始做起。華為手機效果如圖:

?

我的另一部是小米手機:網(wǎng)絡(luò)IP為192.168.1.118 就不截圖了,這部華為手機IP為192.168.1.102,注意上面填寫的IP為接收方的IP而不是自己的IP

點擊發(fā)送按鈕,開始發(fā)送消息:

private DatagramSocket sendSocket = null;

private int sendPort = 8856;

private void sendMsg() {

? ? try {

? ? ? ? if (sendSocket == null) {

? ? ? ? ? ? sendSocket = new DatagramSocket(sendPort);

? ? ? ? }

? ? ? ? InetAddress inetAddress = InetAddress.getByName(tvReceiveIp.getText().toString());

? ? ? ? byte[] bytes = tvServiceMsg.getText().toString().getBytes();

? ? ? ? DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, inetAddress, receivePort);

? ? ? ? sendSocket.send(datagramPacket);

? ? ? ? mHandler.sendEmptyMessage(0);

? ? ? ? System.out.println("MainActivity = " + "發(fā)送成功");

? ? ? ? isRunning = true;

? ? } catch (SocketException e) {

? ? ? ? e.printStackTrace();

? ? } catch (UnknownHostException e) {

? ? ? ? e.printStackTrace();

? ? } catch (IOException e) {

? ? ? ? e.printStackTrace();

? ? }

}

?

private DatagramSocket sendSocket = null;

private int sendPort = 8856;

private void sendMsg() {

? ? try {

? ? ? ? if (sendSocket == null) {

? ? ? ? ? ? sendSocket = new DatagramSocket(sendPort);

? ? ? ? }

? ? ? ? InetAddress inetAddress = InetAddress.getByName(tvReceiveIp.getText().toString());

? ? ? ? byte[] bytes = tvServiceMsg.getText().toString().getBytes();

? ? ? ? DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, inetAddress, receivePort);

? ? ? ? sendSocket.send(datagramPacket);

? ? ? ? mHandler.sendEmptyMessage(0);

? ? ? ? System.out.println("MainActivity = " + "發(fā)送成功");

? ? ? ? isRunning = true;

? ? } catch (SocketException e) {

? ? ? ? e.printStackTrace();

? ? } catch (UnknownHostException e) {

? ? ? ? e.printStackTrace();

? ? } catch (IOException e) {

? ? ? ? e.printStackTrace();

? ? }

}

另一部手機點擊接收,開始接收:

private DatagramSocket receiveSocket = null;

private int receivePort = 8855;

DatagramPacket datagramPacket;

private void receiveMsg() {

? ? try {

? ? ? ? while (isRunning) {

? ? ? ? ? ? if (receiveSocket == null) {

? ? ? ? ? ? ? ? receiveSocket = new DatagramSocket(receivePort);

? ? ? ? ? ? }

? ? ? ? ? ? byte[] bytes = new byte[1024];

? ? ? ? ? ? datagramPacket= new DatagramPacket(bytes, 0, bytes.length);

? ? ? ? ? ? receiveSocket.receive(datagramPacket);

? ? ? ? ? ? mHandler.sendEmptyMessage(1);

? ? ? ? ? ? System.out.println("Main2Activity接收成功 = " + new String(datagramPacket.getData()));

? ? ? ? }

? ? } catch (SocketException e) {

? ? ? ? e.printStackTrace();

? ? } catch (IOException e) {

? ? ? ? e.printStackTrace();

? ? }

}

發(fā)送和接收到的消息通知主線程刷新:

Handler mHandler = new Handler() {

? ? @Override

? ? public void handleMessage(Message msg) {

? ? ? ? super.handleMessage(msg);

? ? ? ? switch (msg.what) {

? ? ? ? ? ? case 0:

? ? ? ? ? ? ? ? creatMessageBean(tvServiceMsg.getText().toString(), true);

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case 1:

? ? ? ? ? ? ? ? creatMessageBean(new String(datagramPacket.getData()), false);

? ? ? ? ? ? ? ? break;

? ? ? ? }

? ? }

};

private void creatMessageBean(String msg, boolean isSend) {

? ? MessageBean messageBean = new MessageBean(msg, isSend);

? ? mAdapter.setData(messageBean);

}

這樣一個簡單的通信demo就完成了,當(dāng)然在demo中我沒有做嚴(yán)謹(jǐn)?shù)男r?,只是為了實現(xiàn)整個流程

demo下載地址為:點擊打開鏈接

因為此系列的目的是實現(xiàn)音頻的傳輸,所以下一篇會先研究音頻的錄制。

公眾號:自學(xué)編程聯(lián)盟

?

另外,本人還有一個京東淘寶天貓福利群,歡迎大家加入??!可先加我私人微信


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容