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

时间:2015-02-18 17:16:55

标签: java android sockets connection

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

                }

现在是代码。希望它能帮到你

提前致谢

1 个答案:

答案 0 :(得分:1)

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

相反,请使用nullary构造函数Socket(),并使用connect方法进行连接。此方法允许您指定连接的超时:

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

 socket.connect(address, timeout);

如果您希望超时的read()调用耗时太长,请使用setSOTimeout