请高人们帮我看看,指点迷津,我写的一个服务端的Applet监听了一个http端口http://127.0.0.1:8085,用AppletView运行一切正常,能够收到客户端发来的http请求。但是把Applet嵌入到html后,再用浏览器打开,看日志端口已经在监听了,但是客户端发请求过去,客户端会报Error:  java.net.SocketException: Software caused connection abort: recv failed这个错误。服务端没有任何反应没收到请求。我的客户端和服务端都是在本地运行的。服务端代码:
import java.applet.Applet;
import java.awt.Event;
import java.awt.Graphics;
import java.awt.Image;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;class httpServerDaemon
{
void startHttpServer()
{
try
{
InetSocketAddress addr = new InetSocketAddress ( 8085 );
HttpServer server = HttpServer.create ( addr, 0 ); server.createContext ( "/", new httpHandler () );
server.setExecutor ( Executors.newCachedThreadPool () );
server.start (); System.out.println ( "Succ:\t Http Processor is listening on 8085" );
}
catch ( Exception ex )
{
System.out.println ( ex.toString () );
}
}
}class httpHandler implements HttpHandler
{
public String getParam(String params, String key)
{
String tokens[] = params.split ( "&" ); for ( int i = 0; i < tokens.length; ++i )
{
String pair[] = tokens[i].split ( "=" ); if ( pair.length == 2 && pair[0].equals ( key ) )
return pair[1];
} return "";
} public void handle(HttpExchange exchange)
{
try
{
System.out.println ( "handle....." );
String requestMethod = exchange.getRequestMethod ();
String response = String.format ( "<?xml version=\"1.0\" encoding=\"UTF-8\"?><XMLRequestVarBean><myState>Ready</myState><serverName>MonitorServer</serverName><serverVersion>v1.0.0.0</serverVersion></XMLRequestVarBean>" ); if ( requestMethod.equalsIgnoreCase ( "POST" ) )
{
String line = "";
String request = "";
BufferedReader br = new BufferedReader ( new InputStreamReader ( exchange.getRequestBody (), "UTF-8" ) ); while ( ( line = br.readLine () ) != null )
{
request += line;
} ClientRequest req = new ClientRequest (); if ( !req.ParseRequest ( request ) )
{
response = "EventError|";
response += "Unknown Request";
}
else if ( req.m_RequestID.equals ( "RequestNotReady" ) )
{
response = "EventNotReady|" + req.m_AgentID + "|ok";
}
else if ( req.m_RequestID.equals ( "RequestAllowNotReady" ) )
{
response = "EventAllowNotReady|" + req.m_AgentID + "|ok";
}
else if ( req.m_RequestID.equals ( "RequestDenyNotReady" ) )
{
response = "EventDenyNotReady|" + req.m_AgentID + "|ok";
}

System.out.println ( "request  = " + request );
System.out.println ( "response = " + response );
}

byte body[] = response.getBytes ( "UTF-8" );
Headers responseHeaders = exchange.getResponseHeaders ();
responseHeaders.set ( "Content-Type", "text/html" );
exchange.sendResponseHeaders ( 200, body.length ); OutputStream responseBody = exchange.getResponseBody ();
responseBody.write ( body );
responseBody.flush ();
responseBody.close ();
}
catch ( Exception ex )
{
System.out.println ( ex.toString () );
}
}
}public class HelloWorld extends Applet
{
/**
 * 
 */
private static final long serialVersionUID = 1L;
Image picture;
String text="";
httpServerDaemon httpserver = null;

public HelloWorld()
{
super ();
} public void destroy()
{
// Put your code here
System.out.println ( "destroy()" );
} public String getAppletInfo()
{
return "This is my default applet created by Eclipse";
}

public void init()
{
// picture = getImage ( getCodeBase (), "test.gif" );
try
{
System.out.println ( "init()" );
httpServerDaemon httpserver = new httpServerDaemon ();
httpserver.startHttpServer ();
System.out.println ( "init() end" );
}
catch ( Exception ex )
{
System.out.println ( ex.toString () );
}
} public void start()
{
System.out.println ( "start()" );
} public void stop()
{
// Put your code here
System.out.println ( "stop()" );
}}服务端的html如下:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My applet 'HelloWorld' starting page</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <SCRIPT language=JavaScript> function sayHello()
{   

   var aaa=document.rmb.rmb_test.value; 

   //得到转换的值 

   var rmb = document.HelloWorld.sayHello(aaa);

   document.rmb.rmb_result.value = rmb;

   return true; 

} </SCRIPT>
<body> <applet code="HelloWorld.class" codebase="./" name="HelloWorld" archive="AppletTest.jar" width="0" height="0"> <!--<param name="p0" value="">
          <param name="p1" value="">--> </applet> </body>
</html>客户端代码:import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;public class SendRequest
{
public static void main(String[] args)
{

String m_Url = "http://127.0.0.1:8085";
try
{
String msg = "RequestAllowNotReady|8002|System";
System.out.println ( "request: " + msg );
Integer statusCode = -1;
DefaultHttpClient client = new DefaultHttpClient (); HttpPost post = new HttpPost ( m_Url );
post.setHeader ( "Content-Type", "text/xml;charset=utf-8" ); StringEntity entity = new StringEntity ( msg );
post.setEntity ( entity ); HttpResponse response = client.execute ( post );
statusCode = response.getStatusLine ().getStatusCode (); if ( statusCode == 200 )
{
String result = EntityUtils.toString ( response.getEntity (), "utf-8" );
System.out.println ( "response: " + result );
}
}
catch ( Exception ex )
{
System.out.println ( "Error:\t " + ex.toString () );
} }
}

解决方案 »

  1.   

    在IE中运行Applet跟用myeclipse里的run java applet 运行 有神马区别呢?
      

  2.   

    这是applet在 browser 运行时的security 保护,你必须设定你的java policytool.
    1、进入安装jdk的目录"JAVA_HOME"\bin,执行policytool.exe2、点击“添加规则项目”,进入规则项目页面3、点击“添加权限”,进入权限新增页面4、在“许可”的下拉菜单选择“ All Permission”,点击确认;5、在规则项目中点击完成;6、在规则工具页面中点击文件菜单,选择另存为,保存文件名为.java.policy(记住前面有个点哟),保存路径为C:\Documents and Settings\Administrator