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



我正在尝试设置连接尝试的最长时间。我试过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

最新更新