当前位置: 首页 > news >正文

建设银行徐州分行网站公司网站建设费用包括哪些

建设银行徐州分行网站,公司网站建设费用包括哪些,手机网站添加微信方式,网站备案多个域名SO_TIMEOUT选项是Socket的一个选项#xff0c;用于设置读取数据的超时时间。它指定了在读取数据时等待的最长时间#xff0c;如果在指定的时间内没有数据可读取#xff0c;将抛出SocketTimeoutException异常。 SO_TIMEOUT的设置 默认情况下#xff0c;SO_TIMEOUT选项的值…SO_TIMEOUT选项是Socket的一个选项用于设置读取数据的超时时间。它指定了在读取数据时等待的最长时间如果在指定的时间内没有数据可读取将抛出SocketTimeoutException异常。 SO_TIMEOUT的设置 默认情况下SO_TIMEOUT选项的值为0表示没有设置超时时间Socket将一直阻塞等待数据的到达。如果将SO_TIMEOUT的值设置为一个非零的正整数那么在读取数据时如果在指定的时间内没有数据可读取将抛出SocketTimeoutException异常。 可以通过Socket类的setSoTimeout()方法来设置SO_TIMEOUT选项的值例如 package com.morris.socket;import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket;/*** Socket服务端演示SO_TIMEOUT** 客户端可以使用nc命令*/ public class ReadTimeoutDemo {public static void main(String[] args) throws IOException {ServerSocket serverSocket new ServerSocket(8099);Socket socket serverSocket.accept();socket.setSoTimeout(5000); // 设置超时时间为5秒InputStream inputStream socket.getInputStream();try {byte[] buffer new byte[1024];int len inputStream.read(buffer);System.out.println(new String(buffer, 0 , len));} catch (Exception e) {System.out.println(e.getMessage());byte[] buffer new byte[1024];int len inputStream.read(buffer);System.out.println(new String(buffer, 0 , len));socket.close();serverSocket.close();}} }上面的例子中设置了SO_TIMEOUT的值为5000单位为毫秒也就是设置了读取数据的超时时间为5秒如果在5秒内没有数据可读取将抛出SocketTimeoutException异常可以通过捕获这个异常来处理超时情况。 注意超时了只是会抛出了SocketTimeoutException异常read()方法不再阻塞连接并没有关闭可以通过捕获这个异常后继续读取数据或者关闭连接。 产生的系统调用如下 socket(AF_INET6, SOCK_STREAM, IPPROTO_IP) 4 setsockopt(4, SOL_IPV6, IPV6_V6ONLY, [0], 4) 0 setsockopt(4, SOL_SOCKET, SO_REUSEADDR, [1], 4) 0 bind(4, {sa_familyAF_INET6, sin6_porthtons(8099), sin6_flowinfohtonl(0), inet_pton(AF_INET6, ::, sin6_addr), sin6_scope_id0}, 28) 0 listen(4, 50) accept(4, {sa_familyAF_INET6, sin6_porthtons(44964), sin6_flowinfohtonl(0), inet_pton(AF_INET6, ::ffff:127.0.0.1, sin6_addr), sin6_scope_id0}, [28]) 5 read(5, 0x7f586012c6c0, 1024) -1 EAGAIN (Resource temporarily unavailable) poll([{fd5, eventsPOLLIN}], 1, 4935) 0 (Timeout) read(5, 0x7f586012c6c0, 1024) -1 EAGAIN (Resource temporarily unavailable)可以看到底层是使用poll的timeout参数来实现读取超时时间的设置。 poll的函数声明如下 int poll(struct pollfd *fds, nfds_t nfds, int timeout);设置连接超时时间 前面的代码通过SO_TIMEOUT选项来设置数据读取的超时时间那么Socket之间建立连接的超时时间如何设置呢 客户端建立连接时可以使用connect()来指定连接的超时时间 package com.morris.socket;import java.io.IOException; import java.io.InputStream; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket;/*** Socket客户端演示连接超时时间**/ public class ConnectTimeoutClientDemo {public static void main(String[] args) throws IOException {Socket socket new Socket();socket.connect(new InetSocketAddress(localhost, 8099), 5000);} }在上述代码中通过调用Socket的connect()方法来尝试连接服务器并设置连接超时时间为5秒。如果在5秒内未能成功连接到服务器将抛出SocketTimeoutException异常。 客户端产生的系统调用如下 socket(AF_INET6, SOCK_STREAM, IPPROTO_IP) 4 setsockopt(4, SOL_IPV6, IPV6_V6ONLY, [0], 4) 0 fcntl(4, F_GETFL) 0x2 (flags O_RDWR) fcntl(4, F_SETFL, O_RDWR|O_NONBLOCK) 0 connect(4, {sa_familyAF_INET6, sin6_porthtons(8099), sin6_flowinfohtonl(0), inet_pton(AF_INET6, ::ffff:127.0.0.1, sin6_addr), sin6_scope_id0}, 28) -1 EINPROGRESS (Operation now in progress) poll([{fd4, eventsPOLLOUT}], 1, 0) 0 (Timeout) clock_gettime(CLOCK_MONOTONIC, {tv_sec10284, tv_nsec286532200}) 0 poll([{fd4, eventsPOLLOUT}], 1, 4893) 0 (Timeout) poll([{fd4, eventsPOLLOUT}], 1, 0) 0 (Timeout)可以看到客户端的连接超时时间也是通过poll函数的timeout来实现的。 服务端可以下面的代码来演示抛出SocketTimeoutException异常 package com.morris.socket;import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket;/*** Socket服务端演示连接超时时间** 使用nc命令执行两次后再执行ConnectTimeoutClientDemo这样就会抛出SocketTimeoutException*/ public class ConnectTimeoutServerDemo {public static void main(String[] args) throws IOException {ServerSocket serverSocket new ServerSocket();serverSocket.bind(new InetSocketAddress(8099), 1);System.in.read();} }先使用nc命令执行两次消耗backlog的值然后再ConnectTimeoutClientDemo5s后就会抛出SocketTimeoutException。 默认连接超时时间 如果不设置连接超时时间默认值是多少呢会不会像读取超时时间一样一直等待呢 我们可以使用下面的代码来测试默认的连接超时时间是多长 package com.morris.socket;import java.io.IOException; import java.net.Socket;/*** Socket客户端演示连接超时时间**/ public class DefaultConnectTimeoutClientDemo {public static void main(String[] args) throws IOException {long start System.currentTimeMillis();try {new Socket(localhost, 8099);} catch (Exception e) {e.printStackTrace();}System.out.println(cost: (System.currentTimeMillis() - start));} }同样配合ConnectTimeoutServerDemo和nc命令使用运行结果如下 java.net.ConnectException: Connection timed outat java.base/sun.nio.ch.Net.connect0(Native Method)at java.base/sun.nio.ch.Net.connect(Net.java:579)at java.base/sun.nio.ch.Net.connect(Net.java:568)at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:585)at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)at java.base/java.net.Socket.connect(Socket.java:633)at java.base/java.net.Socket.connect(Socket.java:583)at java.base/java.net.Socket.init(Socket.java:507)at java.base/java.net.Socket.init(Socket.java:287)at com.morris.socket.DefaultConnectTimeoutClientDemo.main(DefaultConnectTimeoutClientDemo.java:14) cost: 135866可以看出整个过程花费了135秒这个时间是怎么得来的呢 client发送sync包可能会在网络链路中丢失也有可能server端因为各种原因未及时处理或者无法处理则client要进行重新发送sync包而这重试的次数就是由net.ipv4.tcp_syn_retries来决定默认是6。第一次发送sync包会进行1s的超时等待第二次发送sync包会进行2s的超市等待如此类推公式是2的N次方。 查看net.ipv4.tcp_syn_retries的值 $ sysctl -a | grep net.ipv4.tcp_syn_retries net.ipv4.tcp_syn_retries 6抓包数据 $ tcpdump -nn -i lo port 8099 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes 11:44:02.238833 IP 127.0.0.1.53222 127.0.0.1.8099: Flags [S], seq 319321421, win 65495, options [mss 65495,sackOK,TS val 2026768840 ecr 0,nop,wscale 7], length 0 11:44:03.259673 IP 127.0.0.1.53222 127.0.0.1.8099: Flags [S], seq 319321421, win 65495, options [mss 65495,sackOK,TS val 2026769860 ecr 0,nop,wscale 7], length 0 11:44:05.329576 IP 127.0.0.1.53222 127.0.0.1.8099: Flags [S], seq 319321421, win 65495, options [mss 65495,sackOK,TS val 2026771930 ecr 0,nop,wscale 7], length 0 11:44:09.409633 IP 127.0.0.1.53222 127.0.0.1.8099: Flags [S], seq 319321421, win 65495, options [mss 65495,sackOK,TS val 2026776010 ecr 0,nop,wscale 7], length 0 11:44:17.489597 IP 127.0.0.1.53222 127.0.0.1.8099: Flags [S], seq 319321421, win 65495, options [mss 65495,sackOK,TS val 2026784090 ecr 0,nop,wscale 7], length 0 11:44:34.129690 IP 127.0.0.1.53222 127.0.0.1.8099: Flags [S], seq 319321421, win 65495, options [mss 65495,sackOK,TS val 2026800730 ecr 0,nop,wscale 7], length 0 11:45:06.769597 IP 127.0.0.1.53222 127.0.0.1.8099: Flags [S], seq 319321421, win 65495, options [mss 65495,sackOK,TS val 2026833370 ecr 0,nop,wscale 7], length 0HttpClient的超时时间与Socket的超时时间的关系 以下是使用HttpClient设置超时时间的示例 package com.morris.socket;import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients;import java.io.IOException;/*** 验证HttpClient的超时时间与Socket超时时间的关系*/ public class HttpClientTimeoutDemo {public static void main(String[] args) throws IOException {// 创建 RequestConfig 实例并设置超时时间RequestConfig requestConfig RequestConfig.custom().setConnectTimeout(5000) // 连接超时时间单位毫秒.setSocketTimeout(5000) // 读取超时时间单位毫秒.build();// 将超时配置应用到 HttpClient 实例CloseableHttpClient httpClient HttpClients.custom().setDefaultRequestConfig(requestConfig).build();HttpGet httpGet new HttpGet(http://localhost:8099);httpClient.execute(httpGet);} }在上述示例中setConnectTimeout设置了连接超时时间即建立连接的最长等待时间。setSocketTimeout设置了读取超时时间即从服务器读取数据的最长等待时间。 产生的系统调用如下 socket(AF_INET6, SOCK_STREAM, IPPROTO_IP) 10 connect(10, {sa_familyAF_INET6, sin6_porthtons(8099), sin6_flowinfohtonl(0), inet_pton(AF_INET6, ::ffff:127.0.0.1, sin6_addr), sin6_scope_id0}, 28) -1 EINPROGRESS (Operation now in progress) poll([{fd10, eventsPOLLOUT}], 1, 4922) 0 (Timeout)从系统调用中可以看到在应用层httpclient设置的超时时间实际上对应的是底层socket的超时时间。 在使用HttpClient发起HTTP请求时可以通过设置超时时间来控制连接、读取和写入的超时行为。超时时间可以确保请求在合理的时间范围内完成避免长时间等待或无限期阻塞。
http://www.dnsts.com.cn/news/265614.html

相关文章:

  • 东莞网站建设服务公司怎么评价一个网站设计做的好坏
  • 吴中网站建设手机app软件开发需要多少钱
  • 无锡企业网站建设报价柳州城市的城乡建设管理局网站
  • 如何做网站推广最有效湖北建筑网
  • 中国工商银行官方网站登录定制网站的优势
  • 公司网站的具体的建设方案四川省住房和城乡建设厅官网证件查询
  • 临沂城市建设网站桂林象鼻山门票价格
  • 网站维护兼职营销推广网歹
  • 网站邮箱怎么做的自己做网站买东西
  • 做商品网站的教学视频教程做网站都需要哪些软硬件
  • 兰州网站建设兰州网站制作多久
  • 开发一个商城网站多少钱广告制作公司简介怎么写
  • 企业网站 建设 外包外国大气网站
  • 移动网站视频主持人网做用户运营应该关注哪些网站
  • 网站工程前端衡水网络推广 衡水网站建设
  • 石家庄企业网站建设咸阳网站推广
  • 做周边的专业网站男女直接做的视频网站
  • 潍坊网站建设哪家便宜宿州推广公司
  • 济南网站建设_美叶网络云南昌旅游的网站建设
  • 内容展示型网站 设计特点餐饮食材配送网站开发企划书
  • 南昌网站seo公司网站开发调研问卷
  • 工信部icp网站备案查询淘客手机网站建设
  • 专业SEO教程网站网站推广公司官网
  • 天津做网站都找津坤科技网络广告策划的内容
  • 专业的大良网站建设软件开发用什么笔记本
  • 如何下载ppt模板免费怎么seo网站推广
  • .net网站开发教程有没有医学生做课件的网站
  • 关于免费制作网页的网站南昌seo招聘
  • 网站推广的实际案例网站源码使用方法
  • 电商网站春节放假通知wordpress翻页函数