我正在使用套接字从“C”写入的服务器中获取数据。 我的java类名是ReceivingData,这里是接收数据并将其存储在ArrayList中并将ArrayList传递给其他Class的构造函数的代码。
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();
}
}
}
这是从上面的File传递的ArrayList接收数据的Servlet。 并将来自arraylist的数据存储到数据存储区的Entity中,并将其部署在Google App引擎上。
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);
}
}
答案 0 :(得分:1)
ReceivingData代码显然运行一个线程,并使用本地计算机上的Socket从10.9.211.22端口6870读取数据。没关系。它将四个字节转换为List并将其传递给Receiving_At_Regular_IntervalServlet。很好,但不是你需要的。
此部分可能适用于开发计算机,但如果部署到云中则无法运行。 AppEngine服务器不允许开发人员定义main(),使用Socket或与私有IP子网10通信。忘记将该代码部署到AppEngine。
Receiving_At_Regular_IntervalServlet有一个自定义构造函数。 AppEngine不会调用您的构造函数,因为它的servlet代码只需要默认构造函数。这可能发生在您的503错误发生时。
对于servlet,数据不应该通过构造函数进入。数据必须通过doGet方法的request参数的成员进入(尽管在本例中你应该使用RESTP,而不是使用doPut)。您将数据插入请求参数,但将正确构造的http请求发送到服务器。您的代码缺乏Web应用程序设计。
在单独的项目中构建主程序和AppEngine代码,并使用http与servlet进行主要对话。
答案 1 :(得分:0)
HTTP ERROR 503
错误
当服务器抛出此错误时,您无能为力。仅当服务器中的服务不可用时才会抛出它。
您需要在客户端应用中明确处理此类错误代码(200 OK
除外),并且必须显示相应的消息或作为备用要求建议。
请参阅 :