【问题标题】:android error 'java.net.SocketException: socket failed: EACCES (Permission denied)' [duplicate]android错误'java.net.SocketException:套接字失败:EACCES(权限被拒绝)'[重复]
【发布时间】:2019-04-03 11:00:06
【问题描述】:

我正在尝试通过 TCP 从 android 设备向计算机发送一条简单的消息。当我尝试运行此代码时,出现此错误:

'java.net.SocketException: socket failed: EACCES (Permission denied)'

代码

public class MainActivity extends Activity implements SensorEventListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    try {
        b = (Button)findViewById(R.id.button2);
        err = (TextView)findViewById(R.id.errors);
        mSensorManager = (SensorManager) getSystemService(Activity.SENSOR_SERVICE);
        mRotationSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
        mSensorManager.registerListener(this, mRotationSensor, SENSOR_DELAY);
    } catch (Exception e) {
        Toast.makeText(this, "Hardware compatibility issue", Toast.LENGTH_LONG).show();
    }
    b.setOnClickListener(new View.OnClickListener() {
        public  void onClick(View v){
            try{

                Socket s = new Socket("10.0.0.7", 5555);
                BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                String outMsg = "";
                outMsg = "This is Client";
                out.write(outMsg);
                out.flush();
                out.close();
                s.close();
                err.setText("sending");
            }

            catch(Exception ex){
                err.setText("error"+ex.toString());

            }
        }
    });
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
    // TODO Auto-generated method stub
}

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor == mRotationSensor) {
        if (event.values.length > 4) {
            float[] truncatedRotationVector = new float[4];
            System.arraycopy(event.values, 0, truncatedRotationVector, 0, 4);
            update(truncatedRotationVector);
        } else {
            update(event.values);
        }
    }
}
private void update(float[] vectors) {
    float[] rotationMatrix = new float[9];
    SensorManager.getRotationMatrixFromVector(rotationMatrix, vectors);
    int worldAxisX = SensorManager.AXIS_X;
    int worldAxisZ = SensorManager.AXIS_Z;
    float[] adjustedRotationMatrix = new float[9];
    SensorManager.remapCoordinateSystem(rotationMatrix, worldAxisX, worldAxisZ, adjustedRotationMatrix);
    float[] orientation = new float[3];
    SensorManager.getOrientation(adjustedRotationMatrix, orientation);
    float pitch = orientation[1] * FROM_RADS_TO_DEGS;
    float roll = orientation[2] * FROM_RADS_TO_DEGS;
    ((TextView)findViewById(R.id.pitch)).setText("Pitch: "+pitch);
    ((TextView)findViewById(R.id.roll)).setText("Roll: "+(roll-90));
}

}

我该如何解决?或者请将我重定向到有关该主题的教程。

【问题讨论】:

    标签: java android sockets networking


    【解决方案1】:

    在您的 AndroidManifest.xml 文件中添加 INTERNET 权限:

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

    并且不要在UI线程中访问,Android禁止这样做。您必须在其他线程中访问互联网。

    将您的代码更改为以下代码 sn-p:

    b.setOnClickListener(new View.OnClickListener() {
        public  void onClick(View v){
           new Thread(){
              @Override
              public void run() {
                 try{
    
                    Socket s = new Socket("10.0.0.7", 5555);
                    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                    String outMsg = "";
                    outMsg = "This is Client";
                    out.write(outMsg);
                    out.flush();
                    out.close();
                    s.close();
                    runOnUiThread(new Runnable() {
                       @Override
                       public void run() {
                           err.setText("sending");
                       }
                    });
                 }catch(Exception ex){
                    runOnUiThread(new Runnable() {
                       @Override
                       public void run() {
                           err.setText("error"+ex.toString());
                       }
                    });
    
                 }               
            }
        }.start();
    
    }
    

    });

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 2016-05-25
      • 2015-03-25
      相关资源
      最近更新 更多