`
cuisuqiang
  • 浏览: 3963019 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3672363
社区版块
存档分类
最新评论

异步请求时判断远程服务中断和本地服务器中断

    博客分类:
  • J2EE
阅读更多

先说 一下我们的需求:

本地服务使用TCP/IP从远程取得数据,本地动态展示远程传递的数据!

当远程服务没有连接或异常或者没有返回数据,当本地服务宕机时给予提示!

当服务返回空的数据时不处理!

也就是说这个请求有四种清空需要处理:远程服务中断,本地服务中断,本地返回转发正确消息,本地服务转发或返回空消息。

为防止网络抓取盗版,请访问我的博客获得更多信息,点击连接或访问:http://cuisuqiang.iteye.com/

 

测试例子首先创建一个Servlet,这个请求去初始化一个网络连接,如果初始化成功则返回true。

package com.servlet;
import java.io.*;
import java.net.Socket;
import javax.servlet.*;
import javax.servlet.http.*;
@SuppressWarnings("serial")
public class GetMess extends HttpServlet {
	public GetMess() {
		super();
	}
	public void destroy() {
		super.destroy();
	}
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();		
		String isConnSucc = "false";
		try {
			Socket socket = new Socket("127.0.0.1", 8000);
			System.out.println(socket.getLocalPort());
			isConnSucc = "true";
		} catch (Exception e) {
			e.printStackTrace();
		}
		out.write(isConnSucc);
		out.flush();
		out.close();
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
	public void init() throws ServletException {
		
	}
}

 

在web.xml中配置这个请求:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">	
  <servlet>
    <servlet-name>GetMess</servlet-name>
    <servlet-class>com.servlet.GetMess</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>GetMess</servlet-name>
    <url-pattern>/GetMess</url-pattern>
  </servlet-mapping>  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

在JSP页面中做一些处理:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">    
    <title>远程数据获取</title>
    <script type="text/javascript">
	function testConn(){
		var xmlhttp = getXMLHttpRequest();	
		xmlhttp.onreadystatechange=function() {		
			if (xmlhttp.readyState==4 && xmlhttp.status==200) {
				var res = xmlhttp.responseText;
				if("false"==res){
					alert("无法取得远程信息!");	
				}else if("null"==res){
					// 没有返回数据时一般是不处理的
					//alert("服务器没有返回数据!");
				}else{
					alert("已经取得远程信息!");
					// 一般如果获得数据成功,那么应该间隔继续访问去获得数据
					setTimeout(testConn, 1000);			
				}			
			}else if (xmlhttp.readyState==4 && xmlhttp.status==12029) {
				// 连接状态中12029为网络异常
				alert("本地服务网络中断!无法继续服务!");
			}
		}
		var url = "<%=basePath %>GetMess";
		xmlhttp.open("POST",url,true);
		xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
		xmlhttp.send("time=" +  + Math.random());
	}
	function getXMLHttpRequest(){
		var xmlhttp;
		if (window.XMLHttpRequest) {
			xmlhttp=new XMLHttpRequest();
		}else {
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
		return xmlhttp;
	}
    </script>
  </head>  
  <body onload="testConn();">
    页面自动加载!<br>
  </body>
</html>

 

更为人性化的提示信息可以自己扩展,这里只要服务返回正确就会间隔请求,相当于一个递归调用!

 

关于XMLHttpRequest的使用,你可以访问我的博客其他连接

关于解析返回的内容你可以访问:

解析JSON解析XML

 

关于异步请求中返回消息状态的内容,给出以下清单以查询!

对象XMLHttpRequest
readyState属性包括五种可能的取值: 
0: (未初始化)send方法还没有被调用
1: (加载中)已调用了send方法,请求还在处理
2: (已加载)send方法已完成,整个应答已接收
3: (交互中) 正在解析应答
4: (已完成) 应答已经解析,准备好进行下一步处理
属性status的含义:
0**:未被始化 
1**:请求收到,继续处理 
2**:操作成功收到,分析、接受 
3**:完成此请求必须进一步处理 
4**:请求包含一个错误语法或不能完成 
5**:服务器执行一个完全有效请求失败 
100——客户必须继续发出请求(Continue)
101——客户要求服务器根据请求转换HTTP协议版本(Switching protocols)
200——交易成功(OK)
201——提示知道新文件的URL(Created)
202——接受和处理、但处理未完成(Accepted)
203——返回信息不确定或不完整(Non-Authoritative Information)
204——请求收到,但返回信息为空(No Content)
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件(Reset Content)
206——服务器已经完成了部分用户的GET请求(Partial Content)
300——请求的资源可在多处得到(Multiple Choices)
301——删除请求数据(Moved Permanently)
302——在其他地址发现了请求数据(Found)
303——建议客户访问其他URL或访问方式(See Other)
304——客户端已经执行了GET,但文件未变化(Not Modified)
305——请求的资源必须从服务器指定的地址得到(Use Proxy)
306——前一版本HTTP中使用的代码,现行版本中不再使用
307——申明请求的资源临时性删除(Temporary Redirect)
400——错误请求,如语法错误(Bad Request)
401——请求授权失败(Unauthorized)
402——保留有效ChargeTo头响应(Payment Required)
403——请求不允许(由于服务器上文件或目录的权限设置导致资源不可用)(Forbidden)
404——没有发现文件、查询或URl(没有找到指定的资源)(Not Found)
405——用户在Request-Line字段定义的方法不允许(Method Not Allowed)
406——根据用户发送的Accept拖,请求资源不可访问(Not Acceptable)
407——类似401,用户必须首先在代理服务器上得到授权(Proxy Authentication Required)
408——客户端没有在用户指定的饿时间内完成请求(Request Timeout)
409——对当前资源状态,请求不能完成(Conflict)
410——服务器上不再有此资源且无进一步的参考地址(Gone)
411——服务器拒绝用户定义的Content-Length属性请求(Length Required)
412——一个或多个请求头字段在当前请求中错误(Precondition Failed)
413——请求的资源大于服务器允许的大小(Request Entity Too Large)
414——请求的资源URL长于服务器允许的长度(Request-URI Too Long)
415——请求资源不支持请求项目格式(Unsupported Media Type)
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段(Requested Range Not Suitable)
417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求(Expectation Failed)
500——服务器产生内部错误(Internal Server Error)
501——服务器不支持请求的函数(Not Implemented)
502——服务器暂时不可用,有时是为了防止发生系统过载(Bad Gateway)
503——服务器过载或暂停维修(Service Unavailable)
504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长(Gateway Timeout)
505——服务器不支持或拒绝支请求头中指定的HTTP版本(HTTP Version Not Supported )
12029——an unknown error occurred while processing the request on the server. the status code returned from the server was : 12029(原因:网络不通)

 

以上内容仅供参考!

 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com

 

1
1
分享到:
评论

相关推荐

    本地路径FTP异步上传服务器

    "本地路径FTP异步上传服务器"这个主题涉及到的是如何利用FTP技术将本地计算机上的文件或目录异步地发送到远程FTP服务器。这个过程通常在应用程序执行其他任务时后台进行,以提高效率并避免阻塞主程序的运行。 首先...

    Python3编写实用脚本程序-远程服务器下载文件.zip

    9. **文件校验**:下载完成后,为确保文件完整性和正确性,可以使用哈希算法(如MD5或SHA-1)对本地文件和服务器文件进行校验。 10. **自动化任务**:这样的脚本常常用于自动化任务,比如定期备份、数据同步等,...

    PHP下载远程图片到本地类

    在PHP编程中,有时我们需要从远程服务器下载图片资源并保存到本地服务器,这在构建一些需要展示网络图片的网站或应用时非常常见。本篇将详细介绍如何使用PHP实现这一功能,以及提供的"PHP下载远程图片到本地类"的...

    手机安全卫士(3)——获取服务器更新配置

    7. **错误处理和重试**:网络请求可能会遇到各种问题,如网络中断、服务器错误等,因此必须设计良好的错误处理和重试机制,确保即使在网络不稳定的情况下也能尽可能完成更新。 在手机安全卫士的源代码中,你可能会...

    实现文件列表从指定IP服务器上下载

    FTP则专门用于文件传输,允许用户上传、下载和管理远程服务器上的文件。 2. **IP地址**:IP地址是互联网上每台设备的唯一标识,用于网络通信。指定IP服务器意味着我们需要知道服务器的精确IP地址来建立连接。 3. *...

    第四章 C#+STM32实现设备远程管理与IAP—TCP服务器.rar

    第四章 C#+STM32实现设备远程管理与IAP—TCP服务器主要涵盖了两个核心主题:C#编程语言在构建高性能TCP服务器中的应用以及STM32微控制器的远程管理和固件更新(IAP,In-Application Programming)功能。下面将详细...

    基于TCP的远程字典服务(RemoteLookup)

    【基于TCP的远程字典服务(RemoteLookup)】是一种网络通信协议,它允许客户端应用程序通过TCP/IP协议连接到远程服务器,查询并获取字典数据。这种服务在各种场景下非常有用,例如软件开发中的词汇查找、语言翻译工具...

    WindowsForm向服务器传文件从服务器下载文件.rar

    在本文中,我们将深入探讨如何使用C#...通过这个项目,你可以学习到如何将本地文件系统与远程服务器进行交互,以及如何在Windows桌面应用中实现网络功能。这是一项实用的技能,对于开发涉及文件传输的应用非常有价值。

    基于TCP的Socket编程服务器和客户端代码

    在Java中,使用Socket编程时需要注意异常处理,因为网络通信可能会出现各种问题,如连接失败、数据传输中断等。通常,我们会用try-catch-finally语句块来捕获和处理这些异常,并在finally块中关闭流和套接字,防止...

    用C#实现的SOCKS5代理服务器源代码.rar

    - `Session`类:代表一个客户端会话,处理来自客户端的请求和到远程服务器的转发。 - `ProtocolHandler`类:解析和构造SOCKS5协议报文。 - `Authentication`类(可选):处理客户端的认证请求。 8. **性能优化**...

    andriod 模拟Http请求

    9. **错误处理**:网络请求可能出现各种异常,如网络中断、服务器错误等,因此需要编写合适的错误处理代码,确保应用在出现问题时能够优雅地恢复或提示用户。 10. **缓存策略**:为了优化用户体验,可以设置缓存...

    net.rar_java 服务器_net_socket 服务器_分布式_多客户端

    在Java中,JMS(Java消息服务)、RMI(远程方法调用)和Hadoop等技术常用于构建分布式系统。 4. **多客户端连接**: 在一个服务器程序中,支持多客户端连接意味着服务器能够同时处理多个客户端的请求,而不受阻塞...

    C#实现远程文件传送

    远程文件传送指的是将本地计算机上的文件传输到另一台远程服务器,或者从远程服务器下载文件到本地。这种功能在分布式系统、云计算和网络服务中非常常见。C#提供了多种方法来实现这一目标,包括但不限于FTP(文件...

    服务器和应用系统迁移方案及对策.doc

    - **操作系统迁移**:采用P2V(Physical-to-Virtual)技术,利用Volume Shadow Copy服务,实现在不中断业务的情况下,将旧服务器的系统、应用软件和环境变量等完整迁移至新服务器。 - **应用服务器迁移**:通过...

    简单的ftp服务器

    为了支持这两种模式,服务器需要处理不同类型的连接请求,并在必要时打开和管理数据通道。 6. **文件操作**:FTP服务器的主要功能是处理文件的上传和下载。服务器需要能够读取和写入文件系统,处理文件的创建、删除...

    GPRS转Socket通信服务器

    总结,GPRS转Socket通信服务器是结合了GPRS移动通信技术和网络Socket编程的解决方案,通过优化服务器监听功能和实时监控,可以实现高效稳定的远程通信。掌握这些关键技术点,有助于我们设计和实现更可靠的物联网系统...

    ESP8266 串口接收 串口中断接收 NONOS_SDK-2.2.0_UART_MQTT.rar

    在串口接收中,当接收到新的数据时,硬件会触发中断请求,CPU暂停当前任务,执行中断服务程序来处理新数据。这样可以避免因轮询接收状态而浪费CPU资源,提高系统效率。在ESP8266的编程中,需设置中断服务例程以处理...

    Read-the-remote-text.rar_remote_远程文本

    这些协议允许本地客户端与远程服务器之间进行数据传输。例如,HTTP(超文本传输协议)常用于Web应用,而FTP(文件传输协议)则用于文件的上传和下载。 2. **网络编程**:实现远程文本读取需要具备网络编程知识,...

    远程通信服务器端程序

    远程通信服务器端程序是计算机网络中的一个重要组成部分,它主要用于接收并处理来自客户端的连接请求,进行数据交换。在这个场景中,我们关注的是一个基于Winsock通信流程实现的服务器端源代码,名为"CServer"。...

Global site tag (gtag.js) - Google Analytics