简体   繁体   English

Android无法连接到套接字服务器(java)

[英]Android cannot connect to socket server (java)

I wrote a simple java socket server. 我写了一个简单的Java套接字服务器。 I can connect to it using my java client. 我可以使用Java客户端连接到它。

However when I try to connect an android device to it, it gives the following error : socket failed: eacces (permission denied) 但是,当我尝试将android设备连接到它时,它给出以下错误: socket failed: eacces (permission denied)

Here is the code : 这是代码:

btnConvert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String text = txtText.getText().toString();
                try {
                    Socket socket = new Socket("192.168.0.110", 7575);
                    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                    out.println(text);
                    Toast.makeText(context, in.readLine(), Toast.LENGTH_SHORT).show();
                    in.close();
                    out.close();
                    socket.close();
                }
                catch(Exception e){
                    e.printStackTrace();
                }
            }
        });

this line : Socket socket = new Socket("192.168.0.110", 7575); 这行: Socket socket = new Socket("192.168.0.110", 7575); seems to be the culprit. 似乎是罪魁祸首。

I did some research and found the following links : 我做了一些研究,发现了以下链接:

Error message 'java.net.SocketException: socket failed: EACCES (Permission denied)' 错误消息“ java.net.SocketException:套接字失败:EACCES(权限被拒绝)”

Android java.net.SocketException:socket failed: EACCES (Permission denied) Android java.net.SocketException:socket失败:EACCES(权限被拒绝)

Android java.net.SocketException: socket failed: EACCES (Permission denied) Android java.net.SocketException:套接字失败:EACCES(权限被拒绝)

So, here is my manifest file : 所以,这是我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.priyabrata.socketdemo" >

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

So what is going wrong ?? 那么怎么了?

You cannot create a Socket in an on click handler as it runs in the main thread. 您无法在点击处理程序中创建Socket,因为它在主线程中运行。

Use a thread or AsyncTask to do Socket creation, reads and writes. 使用线程或AsyncTask进行Socket创建,读取和写入。

try to use 10.0.2.2 instead of 192.168.0.110 for your android client localhost. 尝试为Android客户端本地主机使用10.0.2.2而不是192.168.0.110。

maybe it wasn't the main problem but you can just try it. 也许这不是主要问题,但您可以尝试一下。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM