最近學(xué)習(xí)了一下socket通信相關(guān)的知識画株,決定從UDP進(jìn)行文字傳輸開始做起赎懦。華為手機(jī)效果如圖:
?
我的另一部是小米手機(jī):網(wǎng)絡(luò)IP為192.168.1.118 就不截圖了,這部華為手機(jī)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();
? ? }
}
另一部手機(jī)點擊接收,開始接收:
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炇匚剑皇菫榱藢崿F(xiàn)整個流程
demo下載地址為:點擊打開鏈接
因為此系列的目的是實現(xiàn)音頻的傳輸,所以下一篇會先研究音頻的錄制您单。
公眾號:自學(xué)編程聯(lián)盟
?
另外斋荞,本人還有一個京東淘寶天貓福利群,歡迎大家加入芭扒亍平酿!可先加我私人微信