国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android studio TCP網(wǎng)絡(luò)調(diào)試助手應(yīng)用開發(fā)(支持TCP Server與Client切換)

這篇具有很好參考價(jià)值的文章主要介紹了Android studio TCP網(wǎng)絡(luò)調(diào)試助手應(yīng)用開發(fā)(支持TCP Server與Client切換)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

????????在前幾篇的文章中帶大家完成了基于TCP的物聯(lián)網(wǎng)安卓應(yīng)用開發(fā),教程內(nèi)容是創(chuàng)建了一個(gè)TCP客戶端并連接服務(wù)器完成數(shù)據(jù)通信的過程,后不久又發(fā)布了一個(gè)ESP8266創(chuàng)建TCP 服務(wù)器與安卓的客戶端進(jìn)行通信的一個(gè)文章,當(dāng)時(shí)在文章中提到“如果大家有需要將ESP8266配置為TCP的客戶端,手機(jī)APP作為服務(wù)器端,可以進(jìn)入公眾號(hào)進(jìn)行私信,有需求的話會(huì)再更新一期”。
? ? 近期平臺(tái)就收到好幾位小伙伴的私信,今天就帶大家完成一個(gè)安卓創(chuàng)建TCP 服務(wù)器并與客戶端通信的功能,最終的APP集成了客戶端模式和服務(wù)器模式的切換,形成一個(gè)簡(jiǎn)易的TCP調(diào)試助手APP,文末免費(fèi)下載Android Studio工程。
? ? APP功能展示視頻:

TCPassistant


一、獲取手機(jī)接入網(wǎng)絡(luò)的IP地址

創(chuàng)建服務(wù)器與創(chuàng)建客戶端不同,創(chuàng)建客戶端的IP地址不可隨意設(shè)置,只能采用設(shè)備本機(jī)的IP地址,首先先獲取本機(jī)IP地址:

 /**
     * @Description 獲取設(shè)備的接入的wifi或流量網(wǎng)絡(luò)的IP地址。
     */
String getIPAddress() {
        Context context=MainActivity.this;
        NetworkInfo info = ((ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
        if (info != null && info.isConnected()) {
            //流量網(wǎng)絡(luò)
            if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
                try {
                    for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); )
                    {
                        NetworkInterface intf = en.nextElement();
                        for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); )
                        {
                            InetAddress inetAddress = enumIpAddr.nextElement();
                            if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
                                return inetAddress.getHostAddress();
                            }
                        }
                    }
                } catch (SocketException e) {
                    e.printStackTrace();
                }
            }
            //wifi網(wǎng)絡(luò)
            else if (info.getType() == ConnectivityManager.TYPE_WIFI)
            {
                WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
                WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                //調(diào)用方法將int轉(zhuǎn)換為地址字符串
                String ipAddress = intIP2StringIP(wifiInfo.getIpAddress());//得到IPV4地址
                return ipAddress;
            }
        } else 
        {
             Toast.makeText(this,"請(qǐng)先連接網(wǎng)絡(luò)", Toast.LENGTH_SHORT).show();
        }
        return null;
    }
    /**
     * @Description int類型IP轉(zhuǎn)換為String類型
     */
    String intIP2StringIP(int ip) {
        return (ip & 0xFF) + "." +
                ((ip >> 8) & 0xFF) + "." +
                ((ip >> 16) & 0xFF) + "." +
                (ip >> 24 & 0xFF);
    }

二、創(chuàng)建TCP服務(wù)器

String port="";  //可以通過edit_textview.getText().toString();獲取輸入框的IP
ServerSocket serverSocket;
serverSocket = new ServerSocket(Integer.parseInt(port));

三、創(chuàng)建子線程等待客戶端接入

/**
     * 創(chuàng)建子線程等待客戶端接入
     */
    class NewThread_wait_tcpclient extends Thread {
        OutputStream os;
        @Override
        public void run() {
            while (true) {
                System.out.println("–等待客戶端連接–");
                try {
                    tcp_client_socket = serverSocket.accept();
                    System.out.println("得到客戶端連接:" + socket);
                    os = tcp_client_socket.getOutputStream();
                    String client_ip=tcp_client_socket.getInetAddress().toString();
                    new Thread(){
                        @Override
                        public void run() {
                            handler.post(new Runnable() {
                                @Override
                                public void run() {
                                    connected=true;
                                    //完成客戶端連接成功后的一些UI控件更新等
                                }
                            });
                        }
                    }.start();
                    String text = "Hello, I am TCP Server";
                    os.write(text.getBytes());
                } catch (IOException e) {
                    e.printStackTrace();
                }
                Receive_Thread receive_Thread = new Receive_Thread();
                receive_Thread.start();
            }
        }
    }

三、創(chuàng)建子線程接收客戶端數(shù)據(jù)并處理

class Receive_Thread extends Thread {
public void run()
{
            if (null != tcp_client_socket) {
                try {
                    while (true) {
                        final byte[] buffer = new byte[1024];
                        tcp_inputStream = tcp_client_socket.getInputStream();
                        final int len = tcp_inputStream.read(buffer);
                        if (len == -1) {
                            tcp_client_socket.close();
                            tcp_client_socket = null;
                            connected = false;
                            runOnUiThread(new Runnable()
                            {
                                public void run() {
                                  //完成斷開連接后的一些UI控件更新
                                }
                            });
                            return;
                        }
                        runOnUiThread(new Runnable()
                        {
                            public void run() {
                                // TODO Auto-generated method stub
                                String recv_data=new String(buffer, 0, len);
                                //textView_tip.setText("接收到:"+recv_data);
                                //SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");
                                //Date time_date = new Date(System.currentTimeMillis());
                                //add_display_recvdata("["+simpleDateFormat.format(time_date)+"]:"+recv_data);
                            }
                        });
                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

四、向客戶端發(fā)送數(shù)據(jù)

new Thread(new Runnable() {
    OutputStream os = null;
    @Override
    public void run() {
        try {
            os = tcp_client_socket.getOutputStream();
            //從輸入框中獲取輸入的數(shù)據(jù)
            String text=String.valueOf(editText_senddata.getText());
            if(!(text.isEmpty()))
            {
                try {
                    os.write(text.getBytes());
                    Looper.prepare();//解除Android不允許在子線程中彈出 Toast 提示的限制
                    Toast.makeText(getApplicationContext(), "已發(fā)送", Toast.LENGTH_SHORT).show();
                    Looper.loop(); //恢復(fù)限制

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            else
            {
                Looper.prepare();//解除Android不允許在子線程中彈出 Toast 提示的限制
                Toast.makeText(getApplicationContext(), "請(qǐng)先輸入要發(fā)送的數(shù)據(jù)", Toast.LENGTH_SHORT).show();
                Looper.loop();//恢復(fù)限制
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    }).start();

通過上述部分程序可以完成TCP Server的創(chuàng)建和TCP客戶端的通信,結(jié)合之前發(fā)布的TCP Client部分的文章就可以完成TCP網(wǎng)絡(luò)調(diào)試助手的APP應(yīng)用開發(fā)。


公眾號(hào)“IOT趣制作”回復(fù)關(guān)鍵字“tcpass”或“0532”即可獲取Android studio的工程文件。

Android studio TCP網(wǎng)絡(luò)調(diào)試助手應(yīng)用開發(fā)(支持TCP Server與Client切換)


其他參考鏈接:

TCP安卓應(yīng)用開發(fā)基礎(chǔ)教程(TCP Client-Android Studio開發(fā))

ESP8266的TCP通信基礎(chǔ)教程(結(jié)合手機(jī)APP)文章來源地址http://www.zghlxwxcb.cn/news/detail-455615.html

到了這里,關(guān)于Android studio TCP網(wǎng)絡(luò)調(diào)試助手應(yīng)用開發(fā)(支持TCP Server與Client切換)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包