2012-12-05 120 views
0

我有一个关于GWT的问题。假设我的GWT客户端应用程序需要连接到TCP套接字,做一些事情并关闭它。现在它几乎不可能在GWT中作为套接字在客户端不起作用。java GWT服务器创建套接字

但实际上我可以创建应用程序的服务器端的插座,这样的:

package com.kurjerzy.testGWT.server; 

import java.net.Inet4Address; 
import java.net.InetAddress; 
import java.net.Socket; 

import com.kurjerzy.testGWT.client.GreetingService; 
import com.kurjerzy.testGWT.shared.FieldVerifier; 
import com.google.gwt.user.server.rpc.RemoteServiceServlet; 

/** 
* The server side implementation of the RPC service. 
*/ 
@SuppressWarnings("serial") 
public class GreetingServiceImpl extends RemoteServiceServlet implements 
     GreetingService { 

    public String greetServer(String input) throws IllegalArgumentException { 
     // Verify that the input is valid. 
     if (!FieldVerifier.isValidName(input)) { 
      // If the input is not valid, throw an IllegalArgumentException back to 
      // the client. 
      throw new IllegalArgumentException(
        "Name must be at least 4 characters long"); 
     } 

     String serverInfo = getServletContext().getServerInfo(); 
     String userAgent = getThreadLocalRequest().getHeader("User-Agent"); 

     // Escape data from the client to avoid cross-site script vulnerabilities. 
     input = escapeHtml(input); 
     userAgent = escapeHtml(userAgent); 

     String rStr = null; 

     try { 
      InetAddress addr = Inet4Address.getByName("google.com"); 
      Socket s = new Socket(addr , 80); 
      rStr = "connected!"; 
     } catch (Exception e) { 
      rStr = "e: " + e.getMessage(); 
     } 

     return "Hasdasdello, " + input + "!<br><br>I am running " + serverInfo 
       + ".<br><br>It looks like you are using:<br>" + userAgent + "<br>rStr=" + rStr; 
    } 

    /** 
    * Escape an html string. Escaping data received from the client helps to 
    * prevent cross-site script vulnerabilities. 
    * 
    * @param html the html string to escape 
    * @return the escaped string 
    */ 
    private String escapeHtml(String html) { 
     if (html == null) { 
      return null; 
     } 
     return html.replaceAll("&", "&amp;").replaceAll("<", "&lt;") 
       .replaceAll(">", "&gt;"); 
    } 
} 

但不幸的是serverlet不必创建套接字连接权限,并引发异常。

任何想法如何实现?

我想实现的事情是:

1)具有天然的Java,Android和GWT具有的所有客户端提供的逻辑的服务器实时游戏客户端连接到服务器

2)一次

所以native-java和android客户端可能会使用传统tcp套接字连接到服务器。现在我希望允许连接到HTML5的环境相同的游戏服务器,但我想不通的连接传输我应该用什么...

可能的矿山思路是:

a)作出serverlet接受RPC调用并使用套接字与游戏服务器进行通信(但如何通过该权限denited?)

b)使gwt客户端使用一些第三方javascript套接字库并直接连接到游戏服务器(但哪一个很好用?)

也许你有更好的想法?

游戏是基于所以它不是时间关键码转,但数据被传输实时(延迟是可以接受的,但连接必须保持所有以通知第一玩家移动第二播放器的时间)预先

感谢。

回答