J2ME那些事儿―MIDP网络编程―008

      只有实现移动设备与移动设备或者非移动设备互相通信的功能后,移动设备的应用程序才可以称得上是真正有用的。比如移动设备与PC的数据同步,或者是移动设备之间的数据交换等。J2ME 的MIDP在javax.microedition.io程序包中提供了一整套类,统称为通用连接构架(Genaric Connection Framework,GCF)。GCF使得与其他设备的数据传输变得非常容易。
介绍两种主要的链接方式:
1、HTTP连接
2、Socket连接
 
1、HTTP连接
 
      (1) 使用HTTP连接(GET请求方式)
HttpConnection conn;
InputStream is;
OutputStream os;
try{
   conn=(HttpConnection)Connector.open(" http://www.baidu.com");
   int status=conn.getResponseCode();//判断连接是否正常
   if(status==HttpConnector.HTTP_OK){
      is=conn.openInputStream();     //打开输入流
      int ch;
      StringBuffer buf = new StringBuffer(10000);
      while((ch=is.read())!=-1){
          //处理数据
          buf.append((char)ch);     //使用字符串缓冲
      } 
      System.out.println(buf);      //显示在控制台
   }
   if(is!=null){
      is.close();
   }
   if(conn!=null){
      conn.close();
   }
}catch(Exception e){}
      (2)从Web获取图片信息
HttpConnection conn;
InputStream is;
ByteArrayOutputStream baos;
try{
   conn=(HttpConnection)Connector.open(" http://localhost:8080/bg.png");
   int status=conn.getResponseCode();//判断连接是否正常
   if(status==HttpConnector.HTTP_OK){
      is=conn.openInputStream();     //打开输入流
      baos = new ByteArrayOutputStream();//打开接收流
      int oneByte;
      while((oneByte=is.read())!=-1){
          //处理数据
          baos.write(oneByte); 
      } 
      byte[] b = baos.toByteArray();
      Image image=Image.createImage(b,0,b.length);//数据转换为图片
      this.form.append(image);   //显示图片
   }
   if(is!=null){
      is.close();
   }
   if(conn!=null){
      conn.close();
   }
}catch(Exception e){}
 
2、Socket―套接字连接
 
      使用Socket是连接两台计算机最简单的方法,由于Socket使用的是面向连接的TCP协议,所以保证了传输的质量。
      打开Socket的方法和打开一个HttpConnection类似,所不同的只是URL不同。例如:
SocketConnection sc;
InputStream is;
OutputStream os;
try{
     sc=(SocketConnection)Connector.open("socket://localhost:8088"); //连接服务器的端口是8088
     sc.setSocketOption(SocketConnection.LINGER,60); //设置等待连接悬挂时间,以秒计算
      is=conn.openInputStream();     //打开输入流
      os=sc.openOutputStream();
      os.write("test".getBytes());       //写入数据
      int ch=0;
      while(ch=!=-1){
          is.read();                                   //读取数据
      } 
      is.close();
      os.close();
      sc.close();
   }
}catch(Exception e){}
      打开一个ServerSocketConnection方法也是一样的。但是不需要给出主机名或者IP,地址是:sockey://:8088的格式,关键代码如下:
ServerSocketConnection scn = (ServerSocketConnection)Connector.open("socket://:8088");   //在端口8088监听socket连接
SocketConnection sc = (SocketConnection)scn.acceptAndOpen(); //等待连接
sc.setSocketOption(SocketConnection.DELAY,0);
sc.setSocketOption(SocketConnection.LINGER,5);
sc.setSocketOption(SocketConnection.KEEPALIVE,0);
sc.setSocketOption(SocketConnection.RCVBUF,1024); //设置接收缓冲
sc.setSocketOption(SocketConnection.SNDBUF,1024); //设置发送缓冲
InputStream is = sc.openInputStream();
OutputStream os = sc.openOutputStream();
is.read();                                   //读取数据
os.write("test".getBytes());  //写入数据
is.close();
os.close();
sc.close();
scn.close();    //关闭连接
 
 

你可能感兴趣的:(职场,网络编程,j2me,休闲)