【问题标题】:How can I get a timeout exception on an android streaming socket connection?如何在 android 流式套接字连接上获得超时异常?
【发布时间】:2013-10-03 17:13:07
【问题描述】:

我一直在编写一个需要连接到 TCP 服务器的应用程序。 我一直试图让这部分代码在无法连接到服务器端端口时发出某种异常。 我知道它无法连接,因为我已经关闭了我的服务器并且端口被阻止了。

这是我目前所拥有的:

public void run()
{
    mRun = true;
    try
    {
        InetAddress serverAddr = InetAddress.getByName(SERVERIP);
        Socket socket = new Socket(serverAddr, SERVERPORT);
        try
        {
            out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

....

无论如何,我的代码最终都会卡在新的 Socket() 构造函数上,并且它不会抛出任何 IO 异常。 到目前为止我已经尝试过

socket.setSoTimeout(timeout);

但它没有任何区别。

对我可以采取的可能行动有什么想法吗?

【问题讨论】:

    标签: java android sockets timeout


    【解决方案1】:

    试试:

    socket = new Socket();
    socket.connect(new InetSocketAddress(serverIpAddress, serverPort), timeout);
    

    【讨论】:

      【解决方案2】:

      SO_TIMEOUT 设置只影响从套接字读取,而不影响初始连接。您可以通过创建一个未连接的套接字然后使用允许timeout 参数的connect 方法使连接超时:

      Socket socket = new Socket();
      socket.connect(new InetSocketAddress(serverAddr, SERVERPORT), timeout);
      

      【讨论】:

      • 这似乎有效。不敢相信我没有注意到我可以做到这一点。
      猜你喜欢
      • 2019-10-21
      • 2011-11-02
      • 2012-09-28
      • 2011-05-12
      • 2012-11-17
      • 2016-10-02
      • 2014-07-09
      • 1970-01-01
      相关资源
      最近更新 更多