用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
oliveyuganfei的公告
www.nc1314.com(南昌人社区)
文章分类
技术论坛
小糊涂的BLOG
存档

原创  http(get,post),socket+mina-core-2.0.0-M3小说下载阅读器 收藏

最近将我以前用socket+socketServer+mysql做的小说阅读器从新移植了一下,现在客户端有三个.一个是http(get)方式,一个是http(post)方式.一个是socket方式,服务器是用MINA2.0-M3来实现的,可以同时解析这三种客户端.下面来简单讲述一下,希望对大家有点帮助.
第一种是http(get)方式.http(get)是种不安全的传输方式.他传统是URL+数据来实现的.也就是说URL后面的参数便是你要给服务器的数据.这样就很不安全,而且据说GET方式传输的数据大小会有限制,不推荐使用.其方法大至为:
   String url="http://"+Gamedata.server_address+":"+Gamedata.server_port+"?"+this.Param;
   System.out.println("url="+url);
   hpc = (HttpConnection)Connector.open(url);
   hpc.setRequestMethod(HttpConnection.GET);
   int status = hpc.getResponseCode();
   if(status==HttpConnection.HTTP_OK){
   ...
   Gamedata.server_address为服务器地址.Gamedata.server_port为服务器端口.this.Param为你要传的数据
   GET方式不用发送Content-Length.已经包括了
第二种是http(post)方式.因为socket只能在midp2.0中使璿所以http现在还是主流网络传输协议.而且post方法.数据没有大小限制.安全性也比GET好,所以一般通用网络都是使用此方式
其方法大至为:
    if(cmwap){
    hpc=(HttpConnection)Connector.open("http://10.0.0.172:80/",Connector.READ_WRITE,true);
    hpc.setRequestProperty("X-Online-Host",Gamedata.server_address+":"+Gamedata.server_port);
    hpc.setRequestProperty("Accept", "*/*");
   }
   else{
    hpc = (HttpConnection)Connector.open("http://"+Gamedata.server_address+":"+Gamedata.server_port,Connector.READ_WRITE);
   }
   hpc.setRequestMethod(HttpConnection.POST);
   hpc.setRequestProperty("Content-Length",String.valueOf(Param.getBytes().length));//给服务器发送数据长度
   //打开输出流
   dos=hpc.openDataOutputStream();
   dos.write(Param.getBytes());//给服务器发送数据
   int status = hpc.getResponseCode();
   if(status==HttpConnection.HTTP_OK){
   ....
第三种是socket方式.midp2.0使用.其性能好速度快不用像HTTP那样请求一次链一次,嘿嘿.大至方法为:
     //建立Socket 
     socketConnection=(SocketConnection)Connector.open("socket://"+Gamedata.server_address+":"+Gamedata.server_port);
     socketConnection.setSocketOption(SocketConnection.KEEPALIVE,0);
     //打开Socket输出流
     dos=socketConnection.openDataOutputStream();
     //打开Socket输入流
     dis=socketConnection.openDataInputStream();
     dos.writeInt(Gamedata.下载小说目录命令.getBytes().length);//发送数据长度
     dos.write(Gamedata.下载小说目录命令.getBytes());//发送数据内容
     //从服务器接收数据
     int length=dis.readInt();
     小说目录名字=new String[dis.readInt()];
     .....
服务器端是MINA2.0-M3最新版实现的.需要apache下载MINA2.0-M3包.还有SJF4J日志包.MINA采用的是sjf4j日志系统
    acceptor = new NioSocketAcceptor();
   chain = acceptor.getFilterChain();
   chain.addLast("codec",new ProtocolCodecFilter(new CodecFactory()));//增加自己实现的Filter
   chain.addLast("logger", new LoggingFilter());//增加日志Filter
   acceptor.setHandler(new ServerHandler());//设置ServerHandler工作类
   acceptor.bind(new InetSocketAddress(Gamedata.server_port));//启动.server_port为端口
   这样便可开启服务.CodecFactory是自己实现的Filter.包括注册编码器.解码器.
   ServerHandler是extends IoHandlerAdapter的.里面主要的有下面几个方法
   sessionOpened//打开时调用
   messageReceived//监听接受数据
   sessionClosed//关闭时调用
   messageSent//消息发送给客户端时调用
   exceptionCaught//异常处理.
   还有几个方法,就不一一例出
  
   MINA大至的过程是:
   启动->监听.有链接.创建打开->调用解码器(检查数据完整,解析数据,得到数据体)->服务器逻辑处理->调用编码器(对于不同客户端处理,比如http.socket要不同处理)->发送数据
   以前做一个网游客户端时.同事Redduke写的服务器留下了编码器.解码器.嘿嘿.拿来用用..
   数据库是用MYSQL建的.链接MYSQL想必大家都会链.几个查询更新语句也会写...就不多嘴了.

发表于 @ 2008年11月20日 19:56:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:motionWelder动作编辑器封装使用 | 新一篇:J2ME POLISH安装,使用

  • 发表评论
  • 评论内容:
  •  
Copyright © oliveyuganfei
Powered by CSDN Blog