当前位置: 首页 > 知识库问答 >
问题:

Android插座连接超时

欧阳衡
2023-03-14

背景我正试图为我的java服务器创建一个android客户端应用程序,并让它们使用TCP套接字进行通信。

当我在android设备模拟器上运行我的应用程序时,它的工作原理是什么

当我在手机上运行该应用程序时,我无法正常工作,我在创建套接字时遇到连接超时。

异常 java.net.Connect异常: 无法连接到 /10.0.2.2 (端口 9111): 连接失败: ETIMEDOUT (连接超时)

服务器和移动设备连接到同一个wifi网络,我已经关闭了笔记本电脑上的防火墙(我运行服务器的地方)

这可能是造成这种情况的原因吗?,感谢任何人的帮助

服务器

public class HelpMeServer {
public final static int port=9111;
public static void main(String[] args) throws IOException {

    Database db=new Database();
    ServerSocket serverSocket = null;
    try {
        serverSocket = new ServerSocket(port);
        System.out.println("Listening on port "+port);
    } catch (IOException e) {
        System.err.println("Could not listen on port: "+port);
        System.exit(1);
    }

   while(true)
   {
    Socket clientSocket = null;
    try {
        clientSocket = serverSocket.accept();
        ClientThread t=new ClientThread(clientSocket,db);
        t.start();
    } catch (IOException e) {
        System.err.println("Accept failed.");
        System.exit(1);
    }
   }
}
}

主要活动

 public class LoginActivity extends Activity {

private EditText view_email;
private EditText view_password;
TextView result;
ConnectionHandler conhandler;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    view_email=(EditText) findViewById(R.id.email);
    view_password=(EditText) findViewById(R.id.password);
    result=(TextView) findViewById(R.id.result);
}
public void login(View view)
{    
    String email=view_email.getText().toString();
    String password=view_password.getText().toString();
    ConnectionHandler c=new ConnectionHandler();
    c.execute(new String[]{"login",email,password});
    try {
        String response=c.get();
        if(response.equals("login successful"))
        {
            Intent i=new Intent(this,MainActivity.class);
            startActivity(i);
        }
        result.setText(response);
    } catch (InterruptedException e) {
        result.setText("err");
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
        result.setText("err");
    }
}
}

启动套接字的异步活动

public class ConnectionHandler extends AsyncTask<String, Void, String>{

public static final String serverip = "10.0.2.2";
public static final int serverport = 9111;
Socket s;
PrintWriter out;
BufferedReader in;
@Override
protected String doInBackground(String... lines)
{
Log.i("AsyncTank", "doInBackgoung: Creating Socket");
try {
    s = new Socket(serverip, serverport);
        Log.i("AsyncTank", "doInBackgoung: Created Socket");
    } catch (Exception e) {
    Log.i("AsyncTank", "doInBackgoung: Cannot create Socket "+e.toString());
    }
        if (s.isConnected()) {
        try {
        in = new BufferedReader(new InputStreamReader(s.getInputStream()));
        out = new PrintWriter(s.getOutputStream(), true);
        Log.i("AsyncTank", "doInBackgoung: Socket created, Streams assigned");
        } catch (IOException e) {
        // TODO Auto-generated catch block
     Log.i("AsyncTank", "doInBackgoung: Cannot assign Streams, Socket not connected");
                e.printStackTrace();
            }
        } else {
    Log.i("AsyncTank", "doInBackgoung: Cannot assign Streams, Socket is closed");
        }
        for (String line:lines)
        {
            writeToStream(line);
        }
        String result=readFromStream();
        return result;
    }

共有1个答案

屠盛
2023-03-14

如果服务器在您的 PC 上运行,请尝试输入您的 PC IP 地址,而不是服务器ip = “10.0.2.2”。

 类似资料:
  • 我正在开发一个单例BluetoothHelper类。在connectToBTDevice()方法中,调用了一个新线程,在该线程中,蓝牙套接字试图连接到蓝牙设备。不幸的是,它开始时很好,但退出时有一个警告系统。错误如下: BluetoothHelper.java onnectToBTDevice(BluetoothDevice device)方法位于第234行。BluetoothSocket con

  • 我试图创建群聊android应用程序和使用Websocket服务器编写的PHP。这个服务器在Web浏览器上工作得很好,但当我试图在android应用程序中使用它时,应用程序一连接就断开了。 这里是Android代码:

  • 我有一个节点。js服务器使用socket。io和Android应用程序。我希望我的应用程序连接到服务器。(我在当地工作) 首先我启动服务器:命令提示符 以下是代码: 然后我试着从这里的活动中联系起来: 我的问题是,我从来没有在服务器上看到“一个用户连接”的日志,但我总是在android日志上看到“尝试连接”和“连接成功”。 有人能帮我解开这个谜团吗? 使现代化 我的代码工作正常,但我遇到了一些Wi

  • 我目前正在编写一个简单的TCP聊天客户端服务器应用程序,它与套接字一起工作。客户端连接到服务器,一旦被接受,就会创建一个新的工作线程来侦听客户端输入。连接到服务器(端口8818处的localhost)工作正常,但只要工作线程在登录java.net之后开始监听更多客户端输入。SocketException:引发连接重置(请参阅下面的堆栈跟踪)。我知道,此异常的一个可能来源可能是服务器或客户端未正确或

  • 问题内容: 我正在使用Java套接字客户端。如果服务器仍连接到我的客户端,但是它不发送对我的消息的响应,则最终会出现读取超时异常。 在那种情况下,我想测试一下是否应该重新连接我的插座,或者只是保持插座可重复使用。 我使用这种情况: 但我似乎总是重新连接。当我记录布尔属性的值时,我看到以下内容: 已连接:true已关闭:true绑定:true 如何连接和关闭? TIA 问题答案: 该主题对此主题进行

  • 我在我的电脑上开发了一个带有python的HIDServer(蓝牙键盘)。有2个服务器套接字(psm 0x11和0x13)正在侦听连接。当我尝试将IPhone连接到计算机时,我收到了一个传入连接(如hcidump中所示),但不知何故,连接被远程主机终止。我的套接字永远无法接受客户端连接。你能帮帮我吗? hciDumps: 启动我的程序后: HCI事件:命令完成(0x0e)plen 4写入扩展查询响