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);