想了解了解URLConnection.setReadTimeout的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于的相关问题,此外,我们还将为您介绍关于ADO.NET的ConnectionT
想了解了解URLConnection.setReadTimeout的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于的相关问题,此外,我们还将为您介绍关于ADO.NET 的 Connection Timeout 和 Command Timeout (转载)、Android-HttpURLConnection setReadTimeout无法正常工作、Android:尝试HttpURLConnection.getOutputStream()时抛出SocketException、apache HttpClient API中的setConnectionTimeout,setSoTimeout和“ http.connection- manager.timeout”之间有什么区别的新知识。
本文目录一览:- 了解URLConnection.setReadTimeout()(了解女性健康)
- ADO.NET 的 Connection Timeout 和 Command Timeout (转载)
- Android-HttpURLConnection setReadTimeout无法正常工作
- Android:尝试HttpURLConnection.getOutputStream()时抛出SocketException
- apache HttpClient API中的setConnectionTimeout,setSoTimeout和“ http.connection- manager.timeout”之间有什么区别
了解URLConnection.setReadTimeout()(了解女性健康)
考虑以下代码段:
URLConnection connection = target.openConnection();connection.setConnectTimeout(5000); // 5 secconnection.setReadTimeout(10000); // 10 sec
这些connection.setReadTimeout
设置是设置可用于开始读取数据的最大时间,还是设置可用于完成读取数据的最大时间?
我的理解是,Java有10秒的时间开始从连接中读取下一个数据字节。由于我们不知道strean的大小,因此从连接中读取所有数据没有超时的限制。这是正确的吗?
答案1
小编典典根据oracle docs,如果在读取超时期间没有可用数据,则可以引发异常
如果读取超时在可读取数据之前到期,则从返回的输入流进行读取时会抛出SocketTimeoutException。
ADO.NET 的 Connection Timeout 和 Command Timeout (转载)
每次对数据库连接时,我们有时候会碰到连接超时或者命令超时,这两个超时是不一样的。以 ADO.NET 为例,当客户端和服务器端连接时,碰到的超时情况主要有下面几种:
当从连接池获取一个连接时,碰到超时。
当建立一个全新连接(而不是从连接池获取)时,碰到超时。
当发送一个命令(command)到 SQL Server 时,超时。
当发送命令(连接字符串带有 “context connection=true” 属性)到 SQL Server 时,超时。
当不是显示的发送一个命令(implicitly)到 SQL Server 时,碰到超时。
当执行异步命令时,(BeginExecute)碰到超时。
当从服务器端,获取行时,碰到超时。
当用 Bulk copy 方式,上传数据时,碰到超时。
这些超时主要是通过连接字符串中的 Connect Timeout 和 SqlCommand.CommandTimeout 来进行控制。前面两种是登录超时由 Connection Timeout 来决定什么时候超时,后面几种是命令超时由 Command Timeout 来决定什么时候超时。
SqlConnection.ConnectionTimeout :
1. 说明: 获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。
2. 默认值:等待连接打开的时间(以秒为单位)。默认值为 15 秒。
3. 备注:值 0 指示无限制
4. 只读
注意 ConnectionTimeout 可以在数据库连接字符串上直接进行设置,如下所示:
Server=(localdb)\mssqllocaldb;Database=yourDb;Trusted_connection=true;Connect Timeout=100;
这也是目前使用 EF Core 时,设置 ConnectionTimeout 比较好的一种方式
SqlCommand.CommandTimeout :
1. 说明:获取或设置在终止执行命令的尝试并生成错误之前的等待时间。
2. 默认值:等待命令执行的时间(以秒为单位)。默认为 30 秒。
3. 备注:值 0 指示无限制,在 CommandTimeout 中应避免值 0,否则会无限期地等待执行命令。
4. 可读可写
在 EF Core 中可以通过 DbContext 来调用 SetCommandTimeout 和 GetCommandTimeout 方法,来设置和获取 CommandTimeout 的值,如下所示:
DbContext dbContext = ...//创建DbContext对象
dbContext.Database.SetCommandTimeout(100);
int? commandTimeout = dbContext.Database.GetCommandTimeout();
特别注意:
"超时时间已到。在操作完成之前超时时间已过或服务器未响应"
类似这种错误,一般是 SqlCommand.CommandTimeout 或者 SqlBulkCopy.BulkCopyTimeout 的时间超时, 而不是 SqlConnection.ConnectionTimeout。
原文链接
Android-HttpURLConnection setReadTimeout无法正常工作
我正在开发一个需要从服务器下载数据的应用程序.
我使用以下代码,除了有时在文件下载过程中被卡住之外,该代码行得通.
try{
URL url = new URL( dlUrl );
con = (HttpURLConnection) url.openConnection();
con.setConnectTimeout(1000); // timeout 1 sec
con.setReadTimeout(1000); // timeout 1 sec
// get file length
int lenghtOfFile = con.getContentLength();
is = url.openStream();
String dir = Environment.getExternalStorageDirectory() + "myvideos";
File file = new File( dir );
if( !file.exists() ){
if( file.mkdir()){
// directory succesfully created
}
}
fos = new FileOutputStream(file + "/" + "video.mp4");
byte data[] = new byte[1024];
long total = 0;
while( (count = is.read(data)) != -1 ){
total += count;
publishProgress((int)((total*100)/lenghtOfFile));
fos.write(data, 0, count);
}
} catch (Exception e) {
Log.e(TAG, "DOWNLOAD ERROR = " + e.toString() );
}
finally{
// close streams
}
问题可能是我正在使用的WIFI连接不稳定,或者我的代码丢失了.
现在,我想在下载停止时添加解决方法,但是不幸的是setReadTimeout似乎没有效果!
我尝试了Stackoverflow中建议的解决方案,但没有一项对我有用.
我是否缺少某种设置?
有什么想法为什么setReadTimeout没有效果?
解决方法:
这是对已有多年历史的问题的新解答,但我的代码中有一个类似的问题可以解决.
这行是问题所在:
is = url.openStream();
获取输入流的正确方法是简单地从连接对象而不是url对象获取输入流.
is = con.getInputStream();
前一种方法可能会打开另一个与通过调用url.openConnection()获得的连接对象分离的网络连接.
我通过评估this web blog page找出了所有这些.
对于其他存在类似问题的人,在调用getInputStream或连接对象的connect方法之前,尽早调用setReadTimout也很重要.
Android:尝试HttpURLConnection.getOutputStream()时抛出SocketException
这是我的第一个android程序,它是一个修改过的hello世界。我在MAC上的仿真器上运行它。我尝试与.NET
Web服务进行通信,但在处给出了异常connection.getOutputStream()
。我可以从模拟器访问该站点。任何帮助表示赞赏:)
URL url = new URL("http://192.168.3.47/service.asmx");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type","application/soap+xml; charset=utf-8");
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);
String soapRequest = String.format(getText(R.string.ws_listemain_ds_new).toString(),city,keyword);
connection.setRequestProperty("Content-Length",Integer.toString(soapRequest.getBytes("UTF-8").length));
//Send request
OutputStreamWriter owr = new OutputStreamWriter(connection.getOutputStream(),"UTF-8");
03-02 15:51:26.950: WARN/System.err(618): java.net.SocketException: Permission denied
03-02 15:51:26.978: WARN/System.err(618): at org.apache.harmony.luni.platform.OSNetworkSystem.socket(Native Method)
03-02 15:51:26.988: WARN/System.err(618): at dalvik.system.BlockGuard$WrappedNetworkSystem.socket(BlockGuard.java:335)
03-02 15:51:27.009: WARN/System.err(618): at org.apache.harmony.luni.net.PlainSocketImpl.create(PlainSocketImpl.java:216)
03-02 15:51:27.018: WARN/System.err(618): at java.net.Socket.checkOpenAndCreate(Socket.java:802)
03-02 15:51:27.037: WARN/System.err(618): at java.net.Socket.connect(Socket.java:948)
03-02 15:51:27.048: WARN/System.err(618): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.(HttpConnection.java:75)
03-02 15:51:27.067: WARN/System.err(618): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.(HttpConnection.java:48)
03-02 15:51:27.079: WARN/System.err(618): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:322)
03-02 15:51:27.139: WARN/System.err(618): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89)
03-02 15:51:27.158: WARN/System.err(618): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:285)
03-02 15:51:27.167: WARN/System.err(618): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:267)
03-02 15:51:27.187: WARN/System.err(618): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:205)
03-02 15:51:27.197: WARN/System.err(618): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:614)
03-02 15:51:27.217: WARN/System.err(618): at gyozo.HelloWorld.HelloActivity.onClick(HelloActivity.java:55)
03-02 15:51:27.269: WARN/System.err(618): at android.view.View.performClick(View.java:2485)
03-02 15:51:27.311: WARN/System.err(618): at android.view.View$PerformClick.run(View.java:9080)
03-02 15:51:27.327: WARN/System.err(618): at android.os.Handler.handleCallback(Handler.java:587)
03-02 15:51:27.347: WARN/System.err(618): at android.os.Handler.dispatchMessage(Handler.java:92)
03-02 15:51:27.367: WARN/System.err(618): at android.os.Looper.loop(Looper.java:123)
03-02 15:51:27.447: WARN/System.err(618): at android.app.ActivityThread.main(ActivityThread.java:3683)
03-02 15:51:27.457: WARN/System.err(618): at java.lang.reflect.Method.invokeNative(Native Method)
03-02 15:51:27.519: WARN/System.err(618): at java.lang.reflect.Method.invoke(Method.java:507)
03-02 15:51:27.527: WARN/System.err(618): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-02 15:51:27.547: WARN/System.err(618): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-02 15:51:27.547: WARN/System.err(618): at dalvik.system.NativeStart.main(Native Method)
apache HttpClient API中的setConnectionTimeout,setSoTimeout和“ http.connection- manager.timeout”之间有什么区别
两者之间有什么区别(标记为评论):
MultiThreadedHttpConnectionManager connManag = new MultiThreadedHttpConnectionManager();HttpConnectionManagerParams managParams = connManag.getParams();managParams.setConnectionTimeout(connectiontimeout); // 1managParams.setSoTimeout(sotimeout); //2HttpMethodBase baseMethod = null;try { HttpClient client = new HttpClient(connManag); client.getParams().setParameter("http.connection-manager.timeout", poolTimeout); //3 baseMethod = new GetMethod(…); int statusCode = client.executeMethod(…); …}catch (ConnectTimeoutException cte ){ //Took too long to connect to remote host}catch (SocketTimeoutException ste){ //Remote host didn’t respond in time}catch (Exception se){ //Some other error occurred}finally { if (baseMethod != null) baseMethod.releaseConnection();}
1. setConnectionTimeout
-如果它确定在建立连接之前的超时。
2. setSoTimeout
-如果确定两个连续数据包之间的不活动时间段或时间差,
那么下面的一个是做什么的:
3. "http.connection-manager.timeout"
答案1
小编典典最低级别的HTTP是TCP套接字。因此,当您请求URL并获得响应时,在较低级别上,将创建一个客户端套接字,该客户端套接字建立与远程服务器套接字的连接,发送一些数据并接收响应。
setConnectionTimeout :客户端尝试连接到服务器。这表示在建立连接或服务器响应连接请求之前经过的时间。
setSoTimeout :建立连接后,客户端套接字在发送请求后等待响应。这是从服务器向服务器发送请求到服务器响应到服务器响应所经过的时间。请注意,这不同于
HTTP Error 408
服务器发送给客户端的信息。换句话说,建立连接后到达客户端的两个连续数据包之间的 最大周期不活动 。http.connection-manager.timeout :
MultiThreadedHttpConnectionManager
使用 HTTP连接池 。它为每个主机设置了最大值和最小值。如果特定主机的所有连接都达到最大值,则同一主机对新连接的请求将必须等待,直到现有连接中的任何一个变为空闲为止。此参数表示发出连接请求时和HttpConnectionManager
返回连接之前所经过的时间。
今天关于了解URLConnection.setReadTimeout和的分享就到这里,希望大家有所收获,若想了解更多关于ADO.NET 的 Connection Timeout 和 Command Timeout (转载)、Android-HttpURLConnection setReadTimeout无法正常工作、Android:尝试HttpURLConnection.getOutputStream()时抛出SocketException、apache HttpClient API中的setConnectionTimeout,setSoTimeout和“ http.connection- manager.timeout”之间有什么区别等相关知识,可以在本站进行查询。
本文标签: