Java 谷歌应用程序引擎HTTP错误503错误

Java 谷歌应用程序引擎HTTP错误503错误,java,google-app-engine,sockets,servlets,Java,Google App Engine,Sockets,Servlets,Ïam使用套接字从以“C”编写的服务器获取数据。 我的java类名是ReceivingData,下面是接收数据并将其存储在ArrayList中并将ArrayList传递给其他类的构造函数的代码 package pack.exp; import java.io.InputStream; import java.net.Socket; import java.util.ArrayList; import java.util.List; public class ReceivingData imp

Ïam使用套接字从以“C”编写的服务器获取数据。 我的java类名是ReceivingData,下面是接收数据并将其存储在ArrayList中并将ArrayList传递给其他类的构造函数的代码

package pack.exp;

import java.io.InputStream;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class ReceivingData implements Runnable
{
    public static void main(String[] args) 
    {

    Thread t = new Thread(new ReceivingData());
         t.start();
    }

    public List<String> obj1;

    @Override
    public void run() 
    {
        Socket s;
        InputStream stream;
        try 
        {
            s = new Socket("10.9.211.22", 6870);
            stream = s.getInputStream();

            byte[] data = new byte[13];
            int read;
            String can_Id= null;

            while((read = stream.read(data)) != -1)
            {

                String can_Data= 
                                String.format("%02X:%02X:%02X:%02X, 
                                data[0], data[1], data[2], data[3]);


                List<String> obj1= new ArrayList<String>();
                obj1.add(can_Data.substring(0, 2));
                obj1.add(can_Data.substring(3, 5));
                obj1.add(can_Data.substring(6, 8));
                obj1.add(can_Data.substring(9, 11));


                Receiving_At_Regular_IntervalServlet rari= new 
                                Receiving_At_Regular_IntervalServlet(obj1);
                Thread.sleep(3000);
            }
        }

        catch (Exception e) 
        {

            e.printStackTrace();
        }
    }
 }
package pack.exp;
导入java.io.InputStream;
导入java.net.Socket;
导入java.util.ArrayList;
导入java.util.List;
公共类ReceivingData实现Runnable
{
公共静态void main(字符串[]args)
{
线程t=新线程(新接收数据());
t、 start();
}
公开名单;
@凌驾
公开募捐
{
插座;
输入流;
尝试
{
s=新插座(“10.9.211.22”,6870);
stream=s.getInputStream();
字节[]数据=新字节[13];
int-read;
字符串can_Id=null;
而((读取=流。读取(数据))!=-1)
{
字符串可以存储数据=
字符串格式(“%02X:%02X:%02X:%02X、,
数据[0]、数据[1]、数据[2]、数据[3]);
List obj1=新的ArrayList();
obj1.add(can_数据子串(0,2));
obj1.add(can_数据子串(3,5));
obj1.add(can_数据子串(6,8));
obj1.add(can_数据子串(9,11));
在定期间隔接收\u rari=新
在定期间隔服务(obj1)处接收;
睡眠(3000);
}
}
捕获(例外e)
{
e、 printStackTrace();
}
}
}
这是一个Servlet,它从上述文件传递的ArrayList接收数据。 将这些数据从arraylist存储到Entity for datastore中,并将其部署到Google App engine上

package pack.exp;


@SuppressWarnings("serial")
public class Receiving_At_Regular_IntervalServlet extends HttpServlet 
{
    List<String> obj2= new ArrayList<String>();

    public Receiving_At_Regular_IntervalServlet(List<String> obj2) throws 
        IOException 
    {
        this.obj2= obj2;
        System.out.println("Receiving in Web Project" + obj2);
        System.out.println("");
        System.out.println("");
    }

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws 
        IOException 
    {
        Key k1 = KeyFactory.createKey("C","0D F0 0800 1"); 

       String parameter1 = obj2.get(0);

           Entity can1 = new Entity(k1);



         can1.setProperty("First Parameter", parameter1); 


         DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
         datastore.put(can1);


           Entity can11 = null;


        try 
        {
            can11= datastore.get(k1);

        }

        catch (EntityNotFoundException e) 
        {
            e.printStackTrace();
        }


        String first_P= (String) can11.getProperty("First Parameter");

        resp.setContentType("text/plain");
            resp.getWriter().println("Parameter---  " + first_P);  

   }
}
package pack.exp;
@抑制警告(“串行”)
公共类在\u常规\u IntervalServlet上接收\u扩展了HttpServlet
{
List obj2=new ArrayList();
在定期的IntervalServlet(列表obj2)上公开接收
IOException
{
这是obj2=obj2;
System.out.println(“在Web项目中接收”+obj2);
System.out.println(“”);
System.out.println(“”);
}
公共void doGet(HttpServletRequest-req、HttpServletResponse-resp)抛出
IOException
{
Key k1=KeyFactory.createKey(“C”,“0D F0 0800 1”);
字符串参数1=obj2.get(0);
实体can1=新实体(k1);
can1.setProperty(“第一个参数”,参数1);
DatastoreService datastore=DatastoreServiceFactory.getDatastoreService();
datastore.put(can1);
实体can11=null;
尝试
{
can11=datastore.get(k1);
}
捕获(EntityNotFounde异常)
{
e、 printStackTrace();
}
String first_P=(String)can11.getProperty(“第一个参数”);
分别为setContentType(“文本/普通”);
resp.getWriter().println(“参数--”+first_P);
}
}

HTTP错误503
错误

当服务器抛出此错误时,您无法提供任何帮助。仅当服务器的服务不可用时才会抛出此错误

您需要在客户端应用程序中明确处理此类错误代码,而不是
200 OK
,并且必须显示相应的消息或作为替代要求建议

请参阅


  • ReceivingData代码显然运行一个线程,并使用本地计算机的套接字从10.9.211.22端口6870读取数据。这很好。它将四个字节转换为一个列表,并将其传递给定期IntervalServlet上的Receiving。这很好,但不是您需要的

    此部分可能在开发计算机上工作,但如果部署到云中则无法工作。AppEngine服务器不允许开发人员定义main()、使用套接字或与专用IP子网10通信。忘记将该代码部署到AppEngine

    在\u常规\u IntervalServlet接收\u时有一个自定义构造函数。AppEngine不会调用您的构造函数,因为它的servlet代码只需要默认构造函数。这可能是发生503错误时的情况

    对于servlets,数据不应该通过构造函数输入。数据必须通过doGet方法的请求参数的成员输入(尽管为了实现RESTful,在本例中应该使用doPut)。您将数据插入请求参数,但向服务器发送正确构造的http请求。您的代码缺少web应用程序设计


    在单独的项目中构建主程序和AppEngine代码,并使用http与servlet进行主对话。

    你必须缩小问题的范围。没有人会试图编译整个程序并试图解决它。为了你自己的利益,如果你想回答这个问题,请多关注一下。@Lipis我编辑过“删除代码并使其变小。@Martin Berends讲述了如何实现main()项目和servlet项目之间的这种连接。main()有一种简单的方法。”要修改基于的帖子部分并在servlet中使用doPost处理它。@Martin Berends我正在浏览mkyong代码,但我无法获得流程,请您解释一下代码。请帮助我,因为我是这方面的新手。提前谢谢,这是一个大问题,我没有时间。做你自己的研究和实验n、 从开始。你的问题的答案对大多数StackOverflow读者来说已经足够了。@Martin Berends Hey Thanx寻求帮助。