⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httputils.java

📁 一套MMORPG手机网络游戏的服务端
💻 JAVA
字号:
/*
 * Created on 2005-5-3
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.swing.server.common;

import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.util.Map;

import org.apache.log4j.Logger;

/**
 * @author vampire_a
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class HTTPUtils {
    
    private static Logger log = Logger.getLogger("HTTPUtils");
    
    private static Charset charset = Charset.forName("UTF-8");
    public static CharsetDecoder decoder = charset.newDecoder();
    
    /**
     * 过滤HTTP请求的头部分,只留下有用的部分
     * @param buff
     */
    public static void filter (ByteBuffer buff ,Map header ,StringBuffer sb) {
        try {

            // 分析HTTP请求,并将头的内容存放在header里
            byte t = 0;
            int num = 0;
            String [] attr = null;
            while (buff.remaining() != 0)
            {
                t = buff.get();
                // 在\r\n前面的内容
                if (t != 10 && t != 13)
                {
                    sb.append((char)t);
                    num = 0;
                }
                // 到达\r了,此时要把属性写到header里
                else if (t == 13)
                {
                    num ++;
                    if (num == 1) {
                        attr = sb.toString().split(": ");
                        if (attr.length == 2)
                            header.put(attr[0], attr[1]);
                    }
                }
                // 到达\n了,此时要把sb清空准备接受下一个属性
                // 也可能头已经读完了~~
                else if (t == 10) 
                {
                    num ++;
                    if (num == 4)
                        break;
                    sb.delete(0, sb.length());
                }
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            log.error(e);
        }
    }
    /**
     * 这里要把buff里的东西都读出来进行处理,处理结束后,把下一个消息的剩余部分还放回buff里
     * 把当前事件的信息返回
     * @param buff
     * @return
     */
    public static String decode (ByteBuffer buff) {
        String re = null;
        try {
            re = decoder.decode(buff).toString();
            if (re.indexOf(Attachment.EVENT_END) > -1) {
                String [] subs = re.split(Attachment.EVENT_END);
                re = subs[0];
                buff.clear();
                buff.put(subs[1].getBytes("UTF-8"));
            }
        } catch (CharacterCodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return re;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -