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()
之类的内容?
答案 0 :(得分:0)
第一:以防万一:不要在UI线程上做网络内容。坏事会发生(tm)
第二:setSoTimeout()
应该在服务器接受连接时给你超时,但是不回复(或者根本没有来自网络的回复)。如果连接被拒绝,则套接字应该明显更快地失败。
编辑:如果Socket类的构造函数已经花了这么长时间,请尝试使用connect(SocketAddress, int)
方法。使用InetSocketAddress作为参数:
Socket s = new Socket();
s.connect(..., 1000);