آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

درخواست راهنمایی در مورد پروژه WifiChat

کیانی  9 سال پیش  9 سال پیش
0 0

با سلام
من میخوام گوشی رو به عنوان کلاینت به یک ماژول esp8266 ارتباط بدم و با استفاده از سورس کد استاد، این کدها رو قرار دادم تو پروژم
لطفأ راهنمایی بفرمایید برای اینکه جهت اتصال لازم نباشه برنامه رو ببندم و دوباره باز کنم (لازم نباشه که حتمأ کلاینت بعد از سرور اجرا بشه) و همچنین هر وقت که ارتباط با سرور قطع و وصل میشه، برنامه اوتوماتیک کانکت بشه، چه کار کنم
با تشکر

 package ir.thewall.kc.car_remote;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;


public class WifiActivity extends Activity {

    private Handler          handler = new Handler();
    private Button           btnA;
    private Socket           socket;
    private DataOutputStream outputStream;
    private BufferedReader   inputStream;


    private boolean searchNetwork() {
        Log.i("LOG", "Connecting...");
        handler.post(new Runnable() {

            @Override
            public void run() {
                Toast.makeText(WifiActivity.this, "Connecting...", Toast.LENGTH_SHORT).show();
            }
        });
        try {
            socket = new Socket();
            socket.connect(new InetSocketAddress("192.168.56.1", 8888));
            Log.i("LOG", "Connected!");
            handler.post(new Runnable() {

                @Override
                public void run() {
                    Toast.makeText(WifiActivity.this, "Connected!", Toast.LENGTH_SHORT).show();
                }
            });
            Log.i("LOG", "true");
            return true;
        }
        catch (Exception e) {}
        Log.i("LOG", "false");
        return false;

    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btnA = (Button) findViewById(R.id.btnA);
        btnA.setVisibility(View.INVISIBLE);

        Thread thread = new Thread(new Runnable() {

            @Override
            public void run() {
                searchNetwork();

                try {
                    outputStream = new DataOutputStream(socket.getOutputStream());
                    inputStream = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                }
                catch (IOException e1) {
                    Log.i("LOG", "Error: Connection is not stable, exit");
                    shutdown();
                }

                while (true) {
                    try {
                        String message = inputStream.readLine();
                        if (message != null) {
                            Log.i("LOG", "" + message);
                        }
                    }
                    catch (IOException e) {}
                }

            }

        });
        btnA.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View V) {
                if (outputStream == null) {
                    return;
                }
                try {
                    outputStream.write("A\r\n".getBytes());
                }
                catch (IOException e) {
                    e.printStackTrace();
                }

            }

        });
        thread.start();
    }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            shutdown();
            return true;
        }

        return super.onKeyDown(keyCode, event);
    }


    private void shutdown() {
        try {
            if (socket != null) {
                socket.close();
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        System.exit(0);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add("Settings").setIcon(R.drawable.settings);
        menu.add("About").setIcon(R.drawable.about);
        return super.onCreateOptionsMenu(menu);
    }
}
+1 0
من یه بار با استفاده از حلقه ی تکرار توی Thread این کارو کردم که تا وقتی به سرور کانکت نشه از حلقه بیرون نمیاد. برای اینکه بعد از قطع شدن دوباره وصل بشه، بعد از قطع شدن به یکی از catch ها توی try / catch میره که یادم نیست کدومه و اونجا به یکی می گید که دوباره سرور بشه و برای اون یکی هم چون یه بار دیگه کانکت شدید IP و Port سرور رو دارید و می تونید دوباره کانکت بشید. (9 سال پیش)
0 0
با سلام با توجه به اینکه قراره سرورمون ماژول esp8266 باشه، پس گوشی همیشه باید کلاینت باشه و رو همین مود اگر ارتباط قطع و وصل شد، برنامه بتونه دوباره به سرور کانکت بشه نه اینکه خودش سرور بشه با تشکر (9 سال پیش)
0 0
با سلام متأسفانه بعد از قطع شدن ارتباط( مثلأ خاموش شدن سرور و یا قطع شدن آنتن) به هیچ کدوم از catch ها نمیره و فقط تو لاگ کت این پیغام رو میده : 05-14 09:37:05.500: D/dalvikvm(22690): GC_FOR_ALLOC freed 3858K, 64% free 4319K/11996K, paused 13ms, total 13ms با برنامه وای فای چت ارائه شده تو آموزش ها هم چک کردم لطفأ راهنمایی بفرمایید برای اینکه بعد از قطع شدن به صورت اتوماتیک دوباره وصل بشه، چه کنم با سپاس (9 سال پیش)
 برای این سوال 6 پاسخ وجود دارد.
پاسخ به سوال 
کیانی  9 سال پیش
0 0

با سلام
از دوستان و اساتید، کسی تمایل نداره ما رو راهنمایی کنه؟
با تشکر

پاسخ به سوال 
کیانی  9 سال پیش
0 0

با سلام
یه مشکل دیگه!
من تو قسمتی که مربوط به دریافت پیام هست این کد رو اضافه کردم

if (message == "B") {
                                check.setImageResource(R.drawable.checkon);
                            }


تا وقتی حرف B رو دریافت کرد، یه عکس رو عوض کنه ولی متأسفانه کار نمیکنه
البته تو log نشون میده که حرف B رو دریافت کرده ولی عکس رو عوض نمیکنه:
لطفأ راهنمایی بفرمایید
با سپاس

 while (true) {
                    try {
                        String message = inputStream.readLine();
                        if (message != null) {
                            Log.i("LOG", "" + message);
                            if (message == "B") {
                                check.setImageResource(R.drawable.checkon);
                            }
                        }
                    }
                    catch (IOException e) {}
                }
            }
        });

+5 0
سلام.باید کدتون رو به این صورت تغییر بدین : if(message.equals("B")) (9 سال پیش)
پاسخ به سوال 
کیانی  9 سال پیش
0 0

با سلام
ممنون از حسن توجه و راهنماییتون
من از کدتون استفاده کردم و وقتی تو امولاتور تست میکنم، صحیح کار میکنه ولی روی گوشی هیچ عکس العملی نشون نمیده،بقیه قسمتها درست هستند ولی وقتی حرف B رو ارسال میکنم کار نمیکنه
با socket protocol هم امتحان کردم تا مطمئن بشم، گوشی کارکتر B رو دریافت میکنه
لطفأ راهنمایی بفرمایید
با سپاس

                while (true) {
                    try {
                        String message = inputStream.readLine();
                        if (message != null) {
                            if (message.equals("B")) {
                                Log.i("LOG", "Daryaft Shod");
                                handler.post(new Runnable() {

                                    @Override
                                    public void run() {
                                        Toast.makeText(WifiActivity.this, "B Daryaft Shod", Toast.LENGTH_SHORT).show();
                                        light.setImageResource(R.drawable.lighton);

                                    }
                                });

                            }
                        }
                    }
                    catch (IOException e) {}
              
  }

+1 0
سلام.خواهش می کنم.راستش نمیدونم،مشکل از کجاست،اما احیانا حین تست کردن رو گوشی واقعی کارکتر B رو تست می کنید یا b رو ! یعنی منظورم اینه که بزرگ و کوچیک بودن حروف مهمه.مگر اینکه از متد equalsIgnoreCase استفاده کنید. (9 سال پیش)
پاسخ به سوال 
کیانی  9 سال پیش
0 0

با سلام
دوستان و اساتید گرامی لطفأ راهنمایی بفرمایید که چرا این پروژه کار نمیکنه
البته روی امولاتور کار میکنه ولی روی گوشی خیر
با تشکر

http://up.persianscript.ir/uploads2/57ab-wifitest.zip

0 0
احتمال داره که نیاز به دسترسی های دیگه ای تو منیفست داشته باشه؟ (9 سال پیش)
0 0
با سلام دوستان عنایت بفرمایید لطفأ با تشکر (9 سال پیش)
+1 0
چرا حتما باید از ماژول esp8266 استفاده بشه ؟ نمیشه از روتر های wifi استفاده کرد ؟ سرور شما با ادرس 192.168.56.102 و پورت 9000 وجود داره ؟ بعد از اتصال چطور پیامی ارسال میشه ؟ بصورت خودکار ؟ این سورس هارو یک نگاهی بندازید : لینک (9 سال پیش)
0 0
ضمن سپاس از حسن توجهتون در مورد esp که انتخابی ندارم چونکه پروژه قراره به این شکل باشه و مشکل از ماژول نیست چرا که با روتر هم همین مشکل رو داره و مثلأ حتی با ساکت پروتکل هم تست کردم سرور وجود داره و ساکت برقرار میشه و بعد از اتصال، روی گوشی یک توست نمایش داده میشه با پیغام connected و روی سرور هم با سریال مانیتور میشه از برقراری ساکت مطلع شد (9 سال پیش)
0 0
در مورد سورس ها هم ممنون من هم از همین دستورات استفاده کردم و جالب اینه که تو امولاتور درست اجرا میشه ولی رو گوشی نه (9 سال پیش)
+1 0
ای پی که تو برنامه هست مال امولاتور هست و کار میده .. مال هر گوشی رو باید گرفت (9 سال پیش)
0 0
مشکل من این نیست و وقتی هم که زو گوشی نصب میکنم با آی پی های مشخص، ارتباط برقرار میشه ولی با رسیدن مثلأ کارکتر B که قراره ریسورس لامپ عوض بشه و روشن بشه، کار نمیکنه (9 سال پیش)
+1 0
اگر کاراکتر B رو بصورت دستی قرار بدید و از سمت سوکت نگیرید ، ریسورس لامصب روشن میشه ؟ یعنی این قسمت حتما درست کار میکنه ؟ کافیه لاگ رو هم بررسی کنید و دریافت شدن کاراکتر B رو هم بررسی کنید و قسمت های مختلف رو چک کنید تا بتونید به باگ برسید (9 سال پیش)
0 0
همه قسمتها رو چک کردم ولی متأسفانه گوشیم و تو اکلیپس نمیشناسه که بتونماز لاگ رو چک کنم، درایورهاشم همه رو نصب کردم ولی گوشیم رو آفلاین میزنه میخواستم خواهش کنم هر کدوم از دوستان امکانش رو دارند یه نگاهی به سورسی که گذاشتم، بندازن پیشاپیش ممنون لینک (9 سال پیش)
+1 0
آفلاین زدن گوشیتون رو از این قسمت حل کنید و لاگ رو بررسی کنید لینک (9 سال پیش)
0 0
سلام ممنون از راهنماییتون مشکل آفلاین حل شد ولی متأسفانه چیزی تو لاگ نشون نمیده و باز هم نمیتونم بفهمم که مشکل از کجاست (9 سال پیش)
0 0
احتمالأ نیاز به تعریف دسترسی خاصی تو مانیفست نداره؟ (9 سال پیش)
+1 0
شما یه نیگاه به پروژه های مشابه درGithub بنداز ببین دسترسی ها چیه و میتونی مشکلت رو از این طریق حل کنی (9 سال پیش)
0 0
دوستان و اساتید گرامی، مشکل از ارسال کارکتر "B" بود که توسط سریال مانیتور ماژول فرستاده میشد و ممنون از همه عزیزان و راهنمایی ها (9 سال پیش)
پاسخ به سوال 
کیانی  9 سال پیش
0 0

مشکل جدیدی که به وجود اومده اینه که برای بررسی از switch (message) میخوام استفاده کنم که از message ایراد میگیره و به عنوان راهنمایی پیشنهاد Change project compliance and JRE to 1.7 رو میده که با انتخابش ارور message برداشته میشه ولی کل پروژه ارور میده و تو Console مینویسه
[2017-03-27 08:58:56 - wifitest] Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.
جالبه که همه پروژه ها همینجوری شدن
لطفأ راهنمایی بفرمایید

0 0
مشکل ارور پروژه ها از تو تنظیمات جاوا کامپایلر ، با انتخاب کامپایلر 1.6 حل شد لطفأ راهنمایی بفرمایید برای حل مشکل switch (message) چیکار کنم؟ (9 سال پیش)
+1 0
برای حل این مشکل،بجای switch از if-else استفاده کنید.چون از جاوای 6 دارین استفاده می کنید نمیشه توی switch از نوع String استفاده کرد. (9 سال پیش)
0 0
با سلام ضمن سپاس از راهنماییتون، من بجای switch از if-else استفاده کردم و کدی رو که در پست زیر قرار دادم،گذاشتم ولی فقط اولین کارکتر دریافتی رو چک میکنه و شرط رو اجرا میکنه مثلأ وقتی A رو دریافت میکنه، عکس پاور عوض میشه ولی دیگه هر کارکتری دریافت میکنه، کاری انجام نمیده لطفأ راهنمایی بفرمایید (9 سال پیش)
0 0
متوجه شدم اشتباهم کجاست نباید از break یا return استفاده میکردم مشکل حل شد (9 سال پیش)
پاسخ به سوال 
کیانی  9 سال پیش
+1 0

 while (true) {
                    try {

                        String message = inputStream.readLine();

                        if (message != null) {
                            if (message.equals("A")) {
         handler.post(new Runnable() {

            @Override
            public void run() {
                power.setImageResource(R.drawable.poweron);

            }
        });
                                break;
                            }

                            else if (message.equals("B")) {
        handler.post(new Runnable() {

            @Override
            public void run() {
                power.setImageResource(R.drawable.poweroff);

            }
        });
                                break;
                            }

                            else if (message.equals("C")) {
        handler.post(new Runnable() {

            @Override
            public void run() {
                lamp.setImageResource(R.drawable.lampon);

            }
        });
                                break;
                            }

                            else if (message.equals("D")) {
        handler.post(new Runnable() {

            @Override
            public void run() {
                lamp.setImageResource(R.drawable.lampoff);

            }
        });
                                break;
                            }
                    }
                    catch (IOException e) {}
                }

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .