发送到服务器套接字时超时


 public void sendToServer(String fileToSend, String ip, int sendPort)
{
    int port = sendPort;
    String url = ip;
    File file = new File(fileToSend);
    String fileName = file.getName();
    Socket sock;
    try {
        sock = new Socket(url,port);
        //Send the file name
        OutputStream socketStream = sock.getOutputStream();
        ObjectOutput objectOutput = new ObjectOutputStream(socketStream);
        objectOutput.writeObject(fileName);
        //Send File
        byte [] mybytearray  = new byte [(int)file.length()];
        FileInputStream fis = new FileInputStream(file);
        BufferedInputStream bis = new BufferedInputStream(fis);
        bis.read(mybytearray,0,mybytearray.length);
        OutputStream os = sock.getOutputStream();
        os.write(mybytearray,0,mybytearray.length);
        fileSentOkay();
        os.flush();
        sock.close();
    } catch (UnknownHostException e) {
        hostNotFound();
    } catch (IOException e) {
        hostNotFound();
    }
}

当我试图发送一些东西到服务器,而服务器没有监听连接时,手机一直尝试发送文件。因此,我的Android程序最终将强制关闭。

我怎么能设置一个超时发生这种情况?我是否需要在发送数据的套接字上使用setSoTimeout()之类的东西?

首先:以防万一:不要在UI线程上做网络操作。不好的事情会发生(tm)

Second:如果服务器接受连接,但没有回复(或者根本没有来自网络的回复),setSoTimeout()应该给您一个超时。如果连接被拒绝,套接字失败的速度会快得多。

编辑:如果套接字类的构造函数已经花了那么长时间,请尝试使用connect(SocketAddress, int)方法。使用InetSocketAddress作为参数:

Socket s = new Socket(); 
s.connect(..., 1000);

相关内容

  • 没有找到相关文章

最新更新