设置连接尝试的最长时间(套接字)

Set a maximum time for the connection attempt (Socket)

我正在尝试设置连接尝试的最长时间。我试过 sleep(5000) 然后 if(!socket.isConnected)。不幸的是它没有用。 我该怎么做?

代码:

                try {

                    socket = new Socket(SERVER_IP, PORT);
                    socket.setSoTimeout(500);

                    Boolean isDone = false;
                    InputStream is = socket.getInputStream();                // Socketstream holen
                    InputStreamReader isr = new InputStreamReader(is);       // Socket lesen

                    BufferedReader br = new BufferedReader(isr);             // In Buffer

                    String msg;

                                                              // Erstelle den String msg

                    while (!isDone && ((br.readLine()) != null)) {     
                        // Do stuff

                    }


                } catch (IOException e) {

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            new AlertDialog.Builder(Bedienung.this)
                                    .setTitle("Fehler bei der Verbindung")
                                    .setMessage("Es konnte keine Verbindung mit " + SERVER_IP + " auf " + PORT + " hergestellt werden!")
                                    .setNegativeButton("Wiederholen", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            dialog.dismiss();

                                            Socket.read(sharedPref);

                                        }
                                    })
                                    .setPositiveButton("Ok", null)
                                    .setIcon(android.R.drawable.ic_dialog_alert)
                                    .show();
                        }
                    });

                }

现在是代码。希望对您有所帮助

提前致谢

当您使用 Socket(String, int) 创建 Socket 时,它会自动尝试连接。无法使用该构造函数设置连接超时。

而是使用空构造函数 Socket(),并使用 connect 方法进行连接。此方法允许您指定连接超时:

 InetSocketAddress address = new InetSocketAddress("localhost", 15180);
 Socket socket = new Socket();
 int timeout = 10000;

 socket.connect(address, timeout);

如果你想让 read() 调用超时,使用 setSOTimeout