java.net.SketException: সকেট ব্যর্থ: EPERM (অপারেশন অনুমোদিত নয়)


143

আমি বেশ কয়েকটি ক্রিয়াকলাপ সহ একটি অ্যান্ড্রয়েড স্টুডিও প্রকল্পে কাজ করছি। আমি বর্তমানে লোকালহোস্টের জাভা সার্লেট থেকে আউটপুটটি পড়ার চেষ্টা করছি তবে সকেটের অনুমতিের কারণে এটি ক্র্যাশ হয়ে গেছে বলে মনে হচ্ছে।

আমি একটি নতুন প্রকল্প তৈরি করেছি, ঠিক একই কোড ব্যবহার করেছি এবং পুরোপুরি কাজ করেছি। সুতরাং আমি বুঝতে চাই না কেন আমার প্রকল্পে কাজ করতে রাজি নয়।

public class LoginActivity extends AppCompatActivity {


String apiUrl = "http://10.0.2.2:8080/ProyectService/Servlet?action=login";
EditText username;
EditText password;
AlertDialog dialog;
Usuario session;

@Override
public void onCreate(Bundle savedInstanceState) {
    // Inicializacion de ventana
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    getSupportActionBar().hide();

    // Inicializacion de componentes
    username = findViewById(R.id.username);
    password = findViewById(R.id.password);

    // Inicializacion de funcionalidad de botones
    Button button= (Button) findViewById(R.id.login);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            UserLoginTask mAuthTask = new UserLoginTask();
            mAuthTask.execute();
        }
    });

    password = findViewById(R.id.password);
    createAlertDialog("Usuario o Contraseña Incorrectos");
    }

    private void createAlertDialog(String message){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(message)
            .setTitle("Error");
    dialog = builder.create();
    }



    // ASYNCRONUS NETWORK PROCESS

    public class UserLoginTask extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
    }


    @Override
    protected String doInBackground(String... params) {

        // implement API in background and store the response in current variable
        String current = "";
        try {
            URL url;
            HttpURLConnection urlConnection = null;
            try {
                url = new URL(apiUrl);
                System.out.println(apiUrl);
                urlConnection = (HttpURLConnection) url
                        .openConnection();

                InputStream in = urlConnection.getInputStream();

                InputStreamReader isw = new InputStreamReader(in);

                int data = isw.read();
                while (data != -1) {
                    current += (char) data;
                    data = isw.read();
                    //System.out.print(current);

                }
                System.out.print(current);
                // return the data to onPostExecute method
                return current;

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
            return "Exception: " + e.getMessage();
        }
        return current;
        }
    }

    protected void onPostExecute(String success) {
        Log.i(success, "");
       //attemptLogin();
    }
}

আমি এটি ডেটা পড়তে আশা করি তবে এটি এই লাইনে ক্র্যাশ হয়ে গেছে:

InputStream in = urlConnection.getInputStream();

এটি ত্রুটি আউটপুট:

java.net.SocketException: socket failed: EPERM (Operation not permitted)
at java.net.Socket.createImpl(Socket.java:492)
at java.net.Socket.getImpl(Socket.java:552)
at java.net.Socket.setSoTimeout(Socket.java:1180)
at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:143)
at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116)
at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186)
at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:248)
at com.example.controller.LoginActivity$UserLoginTask.doInBackground(LoginActivity.java:114)
at com.example.controller.LoginActivity$UserLoginTask.doInBackground(LoginActivity.java:93)
at android.os.AsyncTask$3.call(AsyncTask.java:378)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)

উত্তর:


392

সমাধান করা: এমুলেটর থেকে অ্যাপটি আনইনস্টল করা এবং এটি আবার চালানো দরকার ছিল।


8
এটি আমার পক্ষেও কাজ করেছিল, কেন খুঁজে পেয়েছিল যে এটি প্রথম স্থানে কেন ঘটছে?
বিকাশ পান্ডে

9
আমার ক্ষেত্রে আমাকে ACCESS_NETWORK_STATE অনুমতি প্রদান করতে হয়েছিল। প্রকাশের জন্য <ব্যবহার-অনুমতি অ্যান্ড্রয়েড: নাম = "android.permission.ACCESS_NETWORK_STATE" /> যোগ করুন। এবং আনইনস্টলও করুন
এসকি এমডি

3
একই অবস্থা. প্রশ্নটি এতই অদ্ভুত যে বিষয়টি অদ্ভুত। সম্ভবত এটি একটি বাগ।
ব্যবহারকারী 1511417

1
একটি এমুলেটর থেকে অ্যাপ্লিকেশন সরানো এবং ইনস্টল আবার আমার সমস্যার সমাধান, ধন্যবাদ। দেখে মনে হচ্ছে যে ফায়ারবেস ফাইল সিস্টেমে কিছু ক্যাশে করে এবং এটি পুনঃব্যবহার করে, আমি মনে করি পরিষ্কার অ্যাপ্লিকেশন ডেটাও একটি সমস্যার সমাধান করবে।
Onregs

1
সম্ভবত অনুমতিটি ইতিমধ্যে ক্যাশে হয়েছে এবং বার বার এটি নষ্ট করে দিচ্ছে অনুমতি আপডেট করা হচ্ছে না এবং কেবলমাত্র এসসিআর ফাইল আপডেট করার পরিবর্তে?? এটি পুনরায় ইনস্টলেশন সাহায্য করেছে।
আতিফ আব্বাসি

38

এমুলেটর থেকে অ্যাপটি আনইনস্টল করুন আবার চালনা করুন এবং এটি কাজ করবে আমার একই সমস্যা ছিল had

অ্যাপ্লিকেশন আনইনস্টল করতে আপনার প্রকল্পটি চালানোর জন্য যখন "অ্যাপ্লিকেশনটি বন্ধ হয়ে গেছে" বার্তা উপস্থিত হয় "অ্যাপের তথ্য" ক্লিক করুন এবং আনইনস্টল করুন


1
আমি জানি না কিভাবে, তবে এটি কাজ করে। ডিসেম্বর 2019 এ পোস্ট করা this যদিও এটি কাজ করে, কেন তা জানতে আগ্রহী।
রাজকিরণ

30

সবার আগে আপনার অ্যানড্রয়েড ম্যানিফেস্ট। Xml পরিবর্তন করতে হবে তবে এই ক্রিয়াকলাপের পরে আপনাকে অবশ্যই অ্যাপ্লিকেশনটি আনইনস্টল করে আবার চালাতে হবে। https://developer.android.com/training/basics/network-ops/connecting

এবং কোড এখানে:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

মধ্যে Andro আইডি


2
সত্য, যদিও এটি ইতিমধ্যে সেট হয়ে থাকলেও এখনও একই ত্রুটিটি পেয়েছে - উপরের পরামর্শ মতো করুন - ডিভাইসে অ্যাপটিকে মুছুন এবং আবার এটি ইনস্টল করুন।
ভ্লাদিস্লাভ ভার্স্লাভান্স

11

আমাকে এমুলেটর থেকে অ্যাপটি আনইনস্টল করতে হয়েছিল এবং তারপরে সবকিছু কাজ শুরু করে। আমার সবেমাত্র অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলে ফলো করার অনুমতি প্রয়োজন

<uses-permission android:name="android.permission.INTERNET" />


2

android:usesCleartextTraffic="true"ম্যানিফেস্ট ফাইলটিতে সেট করুন। অনুমতি যোগ করুন INTERNET। অ্যাপটি আনইনস্টল করুন এবং তারপরে আবার ইনস্টল করুন।


0

যদি এখনও ভিপিএন ব্যবহার করি এবং সেলুলার চালু থাকাকালীন ওয়াইফাইয়ের সাথে সংযোগ দেওয়ার চেষ্টা করতাম তখনও কারও কাছে যদি এই সমস্যা থাকে তবে আমি তার মুখোমুখি হয়েছি। আমি যেকোন সংযোগ ভিপিএন ক্লায়েন্ট ব্যবহার করছিলাম। সলিউশনটি হ'ল অনুমতি বাইপাস সক্ষম করা যা আপনাকে নির্দিষ্ট নেটওয়ার্কে একটি সকেট বাঁধতে দেয় যদি আপনি এটি যা খুঁজছেন তা যদি হয়।

যেকোন সংযোগ কেবল এই কী এর মাধ্যমে পরিচালিত বিধিনিষেধগুলিতে (ইএমএম দ্বারা) কনফিগার করা থাকলে কেবল অনুমতিবিপাস ব্যবহার করে: vpn_connection_allow_bypass।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.