繁体   English   中英

无法将我的android设备连接到我的python套接字服务器?

[英]Cannot connect my android device to my python socket server?

我有一个python套接字服务器,我的android设备可以连接到该服务器,但是我的android模拟器可以连接到它,但是我的手机无法连接到它,并给出错误ETIMEDOUT。 谁能告诉我这是怎么回事?

Python服务器:

    import socket               
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)         
    host = socket.gethostname() 
    port = 12345                
    s.bind((host, port))        
    s.listen(10)                 
    while True:
        c, addr = s.accept()     
        print(addr)
        c.send(bytes('Thank you for connecting','utf-8'))
        c.close()

Android客户端:Client.java:

    package com.example.abhishekroul.clientapp;
    import android.os.AsyncTask;
    import android.widget.TextView;

   //import java.io.ByteArrayInputStream;
     import java.io.ByteArrayOutputStream;
     import java.io.IOException;
     import java.io.InputStream;
     import java.net.Socket;
     import java.net.UnknownHostException;
     public class Client extends AsyncTask<Void,Void,Void>
    {
       String dstAddress;
int dstPort;
String response="";
TextView textResponse;
Client(String addr,int port, TextView textResponse)
{
    dstAddress=addr;
    dstPort=port;
    this.textResponse=textResponse;
}

@Override
protected Void doInBackground(Void ...arg0)
{
    Socket socket=null;
    try
    {
        socket=new Socket(dstAddress,dstPort);
        ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream(1024);
        byte[] buffer=new byte[1024];
        int bytesRead;
        InputStream inputStream= socket.getInputStream();
        while((bytesRead=inputStream.read(buffer))!=-1)
        {
            byteArrayOutputStream.write(buffer,0,bytesRead);
            response += byteArrayOutputStream.toString("UTF-8");
        }
    }
    catch(UnknownHostException e)
    {
        e.printStackTrace();
        response="UnknownHostException:"+e.toString();
    }
    catch (IOException e)
    {
        e.printStackTrace();
        response="IOException:"+e.toString();
    }
    return null;
}

@Override
protected void onPostExecute(Void result)
{
    textResponse.setText(response);
    super.onPostExecute(result);
}
}

MainActivity.java:

    package com.example.abhishekroul.clientapp;

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;

    public class MainActivity extends AppCompatActivity {

EditText address, port;
TextView response;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    address = (EditText) findViewById(R.id.address);
    port = (EditText) findViewById(R.id.port);
    response = (TextView) findViewById(R.id.response);

}

public void funcConnect(View v)
{
    Client client= new Client(address.getText().toString(),Integer.parseInt(port.getText().toString()),response);
    client.execute();
}

public void funcClear(View v)
{
    response.setText("");
}


}

Manifest.xml:

   <?xml version="1.0" encoding="utf-8"?>
   <manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.abhishekroul.clientapp" >
   <uses-permission android:name="android.permission.INTERNET"/>
   <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme" >
    <activity android:name=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

在模拟器上进行连接,但在Android手机上显示ETIMEDOUT错误。

因此,经过大量测试,我发现使用端口80解决了该问题的解决方案,该HTTP协议通常不会被阻止,因为基于HTTP的进程将停止,因为此协议通常使用此端口,因此最好将用户端口80用于套接字创建。

暂无
暂无

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

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