1.jerrymouse开发

浏览器请求本地接收的信息大概使这个样子滴。

新增连接:/127.0.0.1:65150
GET /src/timthumb.jpg HTTP/1.1
Host: 127.0.0.1:8888
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36
Accept: image/webp,image/*,*/*;q=0.8
Referer: http://127.0.0.1:8888/123123
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8

当无GET,POST等请求的时候,浏览器请求大概是这个样子滴

GET / HTTP/1.1
Host: 127.0.0.1:8888
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8

现在要做的是实现一个接口,获取上述数据并解析get和post请求。

以下是监听器代码

package main.java.per.jerrymouse;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Created by 爹 on 2016/11/6.
 * fun:用于监听访问本机某个端口的输入。现在暂时定为8888,以后迭代开发的时候可设置为配置文档更改要监听的端口号。
 */
public class ConnectListener {
    //一个程序只有一个监听器。
    private static ServerSocket serverSocket = null;

    private ServerSocket getLisetener() {
        if (serverSocket == null) {
            try {
                serverSocket = new ServerSocket(8888);
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("创建端口监听器失败");
            }
            return serverSocket;
        } else return serverSocket;
    }

    //这里用观察者模式吧,循环监听事件。当有连接进来的时候,就通知观察者开启一个新线程获取socket对象,并处理。
    public static void startListening() {
        ConnectListener connectListener = new ConnectListener();
        serverSocket = connectListener.getLisetener();
        while (!Thread.interrupted()) {
            try {
                Socket socket = serverSocket.accept();
                ListenerObserver listenerObserver = ListenerObserver.getListenerObserver();
                listenerObserver.getNotice(socket);
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("获取观察者失败");
            }
        }
    }

}

用到一个观察者模式,当有connection进入端口后,观察者有反应。

package main.java.per.jerrymouse;

import java.io.IOException;
import java.net.Socket;

/**
 * Created by 爹 on 2016/11/6.
 * 端口监听器的观察者
 */
public class ListenerObserver {
    private static ListenerObserver listenerObserver = null;

    public static ListenerObserver getListenerObserver() {
        if (listenerObserver == null) {
            listenerObserver = new ListenerObserver();
            return listenerObserver;
        } else {
            return listenerObserver;
        }
    }

    void getNotice(Socket socket) throws IOException {
        NetworkChannel networkChannel = (NetworkChannel) socket;
        ParseNetworkChannel parseNetworkChannel = new ParseNetworkChannel();
        parseNetworkChannel.parseGetInfo(networkChannel);
    }
}

解析前端传过来的东西。现在只是个main方法,我觉得还是把jerrymouse做成jar包,获取它的inputstream和outputstream好一点。

package main.java.per.jerrymouse;


import java.io.*;

/**
 * Created by li on 2016/11/6.
 * 解析前端传输过来的东西。并解析其中get,post信息。
 */
public class ParseNetworkChannel {
    private String getInfo;
    private String postInfo;

    String parseGetInfo(NetworkChannel networkChannel) throws IOException {
        InputStream inputStream = networkChannel.getInputStream();
        byte[] bytes = new byte[20480];
        inputStream.read(bytes);
        String allInfo = new String(bytes);
        System.out.println(allInfo);
        return null;
    }

    public static void main(String[] args) {
        String s = "新增连接dsdsdsd:/127.0.0.1:51974\n" +
                "GET /favaaaicon.ico HTTP/1.1\n" +
                "Host: 127.0.0.1:8888\n" +
                "Connection: keep-alive\n" +
                "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36\n" +
                "Accept: */*\n" +
                "Referer: http://127.0.0.1:8888/\n" +
                "Accept-Encoding: gzip, deflate, sdch, br\n" +
                "Accept-Language: zh-CN,zh;q=0.8";
        System.out.println(s.indexOf("GET"));
        System.out.println(s.indexOf("HTTP/1.1"));
        char[] chars = s.toCharArray();
        for (int i = s.indexOf("GET")+4; i < s.indexOf("HTTP/1.1"); i++) {

            System.out.print(chars[i]);
        }
 }
}

 哦!忘了还有个包装类。

package main.java.per.jerrymouse;

import java.net.Socket;

/**
 * Created by li on 2016/11/6.
 * 一个包装类,包装Socket.
 */
public class NetworkChannel extends Socket {
}

 

转载于:https://my.oschina.net/marjeylee/blog/782400

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值