C/S架构下的移动资费页面终结者—理想网关代理

  大家看到这篇文章,我心情真的是很沉重的。为什么?那我告诉你,我现在写的是第二遍~刚才准备提交的时候不小心按到什么。。。没啦!5555。。。写了1个小时诶~

  最近手头 有一个C/S架构项目,完成了HTTP跟SOCKET两种方式的连接,在进行CMNET测试都已经通过,但是在进行CMWAP就没这么顺利了!原先我们做的都是对content-type进行判断。但是自从资费页面又改了,这个方法我就再也没有成功过!因为程序在哪里死循环住了!想想这样被移动牵着鼻子走也不是个事,干脆自定义数据标识头,也不要去搭理text/vnd.wap.wml是什么!接下来我贴一下关键代码:

客户端:

//cRef是自定义一个数据标识头,就是我们的关键,这个需双方协议定义好!这里我暂且为4,3,2,1.实际项目大家可复杂些为好!

byte[] cRef=new byte[4];
String url="http://125.120.160.11:8080";

//第一次发起连接

try {
   
   conn = (HttpConnection) Connector.open("http://10.0.0.172"+"/WebModule1/uisevlet", 3,true);
   conn.setRequestProperty("X-Online-Host", url);

   conn.setRequestMethod (HttpConnection.POST);

   conn.setRequestProperty ("Accept","*/*");

   conn.setRequestProperty ("User-Agent","Profile/MIDP-2.0 Configuration/CLDC-1.0");

   conn.setRequestProperty("Content-Length", "");//无发送数据
            conn.setRequestProperty ("Connection", "Keep-Alive");
    
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

   try {
 

   dos=new DataOutputStream(conn.openOutputStream());
   dis=new DataInputStream(conn.openInputStream());

//读取标识数据
   dis.read(cRef, 0, cRef.length);

//此处为了方便测试,把标示数据转换成字符串显示在paint中,供程序员查看是否正确

   strTest=String.valueOf(cRef[0]);
   strTest1=String.valueOf(cRef[1]);
   strTest2=String.valueOf(cRef[2]);
   strTest3=String.valueOf(cRef[3]);

//如果不是我们协议中规定的,那么再次连接
   while(cRef[0]!=3&&cRef[1]!=2&&cRef[2]!=1&&cRef[3]!=0)

  {

//这里是对上次的连接进行关闭与释放
     dos.close();
  
  dos=null;

  conn.close();

  conn=null;

//再次连接

  conn = (HttpConnection) Connector.open("http://10.0.0.172"+"/WebModule1/uisevlet", 3,true);
  conn.setRequestProperty("X-Online-Host", url);

  conn.setRequestMethod (HttpConnection.POST);

  conn.setRequestProperty ("Accept","*/*");

  conn.setRequestProperty ("User-Agent","Profile/MIDP-2.0 Configuration/CLDC-1.0");

  conn.setRequestProperty("Content-Length", "");//请求无数据发送

  conn.setRequestProperty ("Connection", "Keep-Alive");

  //dos=new DataOutputStream(conn.openOutputStream());

 

 
  dos=new DataOutputStream(conn.openOutputStream());
  dis=new DataInputStream(conn.openInputStream());
 
//读取标识数据
  dis.read(cRef, 0, cRef.length);
 //此处为了方便测试,把标示数据转换成字符串显示在paint中,供程序员查看是否正确
  strTest=String.valueOf(cRef[0]);
  strTest1=String.valueOf(cRef[1]);
  strTest2=String.valueOf(cRef[2]);
  strTest3=String.valueOf(cRef[3]);
  }

  //连接成功
  } catch (IOException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
   
  }finally
  {
   try {if(dos!=null)
  {
   
   
    dos.close();
    dos=null;
  }
  if(dis!=null)
  {
   dis.close();
   dis=null;
  }
  if(conn!=null)
  {
   conn.close();
   conn=null;
  }
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } 
  }

 

服务端代码:

服务端是servlet写的!

import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class UISevlet extends HttpServlet {
    private static final String CONTENT_TYPE = "text/html; charset=GBK";

    //Initialize global variables
    public void init() throws ServletException {
    }


    //Process the HTTP Post request
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException {
       System.out.println("servlet启动");
    
        //定义连接返回给客户端的标示数据
        byte[] sSend=new byte[4];
       //内容分别赋予4,3,2,1.这里只是简单设置,实际应用中为了数据安全可复杂些
        for(int i=0;i<4;i++)
                        {
                                sSend[3-i]=(byte) i;
  }
      
        //建立输入输出流管道
        ServletInputStream servletIn=request.getInputStream();
        DataInputStream dis=new DataInputStream(servletIn);

 

         ServletOutputStream servletOut=response.getOutputStream();
         DataOutputStream dos=new DataOutputStream(servletOut);
               response.setContentType("application/octet-stream");
        //发送数据管道,servlet方式发送
        /发送连接标示数据
       dos.write(sSend);
       dos.flush();
       System.out.println("发送完毕");
        System.out.println("is post");

     }

    //Clean up resources
    public void destroy() {
    }

}

新手之痛,我想每一个人多有过!我希望大家都有助人之心,这样我们的行业才会前进!才会扩大发展!没之前写的多!因为没思绪了!再此也谢谢曾今帮助过我的达人们!你们的回答没有白费,它已经促进了这个行业的进步!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值