cmnet 및 cmwap 액세스

CMWAP(WAP 게이트웨이 에이전트를 통해 WAP 게이트웨이로 서버를 연결한 후 서버의 결과를 클라이언트에게 전달)와 CMNET(인터넷을 직접 연결하는 방식으로 서버와 통신)는 중국 이동이 제공하는 두 가지 네트워크 접속 방식이다. CMWAP는 사실상 클라이언트 <--> WAP 게이트웨이 <--> 서버의 연결 방식이고 CMNET는 클라이언트 <--> 서버의 직접 연결 방식을 사용한다.
 
public class ActionDispatcher extends MIDlet {
	private Display display = Display.getDisplay(this);
	private Form f;
	
	protected void startApp() throws MIDletStateChangeException {
		f = new Form("Network Test");
		f.append(" ,  ; cmwap cmnet , , ");
		display.setCurrent(f);
		try {
			cmwap(); //  wap , wap 。 。
			cmnet();
		} catch (IOException e) {
			e.printStackTrace();
		}
		f.append(" , ");
		display.setCurrent(f);
	}

	private void cmwap() throws IOException {
		HttpConnection conn = null;
		InputStream is = null;
		if (f.size() > 0) f.delete(0); // cmwap() , cmnet() Form.delete() 
		try {
			conn = (HttpConnection) Connector.open("http://10.0.0.172:80/", Connector.READ_WRITE, true);
			conn.setRequestProperty("X-Online-Host", "wap.sina.com");
//			conn.setRequestProperty("Accept", "*/*");
			is = conn.openInputStream();
			f.append("cmwap: no exception, test passed");
		} catch (Exception e) {
			f.append("cmwap failed: " + e.toString());
		} finally {
			if (is != null) {
				is.close();
				is = null;
			}
			if (conn != null) {
				conn.close();
				conn = null;
			}
			f.append("
"); } } private void cmnet() throws IOException { HttpConnection conn = null; InputStream is = null; try { conn = (HttpConnection) Connector.open("http://wap.sina.com/", Connector.READ_WRITE, true); // timeouts - A flag to indicate that the caller wants timeout exceptions is = conn.openInputStream(); f.append("cmnet: no exception, test passed"); } catch (Exception e) { f.append("cmnet failed: " + e.toString()); } finally { if (is != null) { is.close(); is = null; } if (conn != null) { conn.close(); conn = null; } f.append("
"); } } protected void pauseApp() {} protected void destroyApp(boolean arg0) throws MIDletStateChangeException {} }

CMWAP 방식으로 접속할 때 MIDlet은 WAP 게이트웨이와 직접 연결됩니다. 주소는 10.0.0.172입니다.또한 MIDlet은 Http 헤더(Header)에 다음 정보를 추가해야 합니다. X-Online-Host: 네트워크 서버의 도메인 이름과 포트입니다. 이렇게 하면 WAP 게이트웨이가 프록시로 서버에 요청을 전달합니다.또한 User Agent와 같은 필드를 HTTP 헤더에 추가할 수 있습니다.
 
데모 하나 더 보내주세요.
public HttpConnection openCMWAP(String url, String contentType) throws IOException {
	HttpConnection httpConn = null;
	for (int i = 0; i < 5; i++) { //  5 , 5 , or 
		if (httpConn != null) httpConn.close();
		httpConn = (HttpConnection) Connector.open(url, Connector.READ);
		httpConn.setRequestMethod(HttpConnection.GET);
		if (httpConn.getHeaderField("Content-Type").indexOf(contentType) > -1) {
			if (httpConn.getResponseCode() == HttpConnection.HTTP_OK) {
				return httpConn;
			}
			break;
		}
	}
	throw new IOException("Max Connector open count.");
}
public HttpConnection openCMNET(String url, String contentType) throws IOException {
	String proxy = "http://10.0.0.172";
	String serverName = null;
	boolean needProxy = false;
	if (proxy != null && proxy.length() > 0) {
		needProxy = true;
		// http://servername/filename
		serverName = url.substring(0, (url.indexOf("/", 7) + 1));
		url = proxy + "/" + url.substring(url.indexOf("/", 7) + 1, url.length());
	}
	HttpConnection httpConn = null;
	for (int i = 0; i < 5; i++) {
		if (httpConn != null) httpConn.close();
		httpConn = (HttpConnection) Connector.open(url, Connector.READ, true);
		if (needProxy) {
			httpConn.setRequestProperty("X-Online-Host", serverName);
			httpConn.setRequestProperty("Accept", "*/*");
		}
		httpConn.setRequestMethod(HttpConnection.GET);
		if (httpConn.getHeaderField("Content-Type").indexOf(contentType) > -1) {
			if (httpConn.getResponseCode() == HttpConnection.HTTP_OK) {
				return httpConn;
			}
			break;
		}
	}
	throw new IOException("Max Connector open count.");
}

좋은 웹페이지 즐겨찾기