为了研究tcp连接建立过程,用java编写了一个tcp客户端(client),一个tcp服务端(Server)。程序的逻辑很简单,client连接server,向server发送消息,server收到消息作出响应,如果发送的消息是”close”字符串,双方关闭连接。

用抓包工具wireshark进行抓包,分析整个通信过程。

server

public class TcpServer {
    private final int SERVER_PORT = 8001;
    private ServerSocket servSocket;
    private Socket socket;
    public static void main(String[] args) throws Exception {
        TcpServer server = new TcpServer();
        server.acceptRequest();
    }
    /**
     * 接收客户端请求
     *
     * @throws Exception
     */
    public void acceptRequest() throws Exception {
        servSocket = new ServerSocket(SERVER_PORT);
        while (true) {
            System.out.println("准备接受请求....");
            socket = servSocket.accept();
            System.out.println("接收来自" + socket.getInetAddress().getHostName() + "的请求");
            while (true) {
                try {
                    InputStream in = socket.getInputStream();
                    int size;
                    byte[] msg = new byte[1024];
                    ByteArrayOutputStream bout = new ByteArrayOutputStream();
                    size = in.read(msg);
                    if (size == -1) {
                        System.out.println("关闭连接:" + socket.getInetAddress());
                        socket.close();
                        break;
                    }
                    bout.write(msg, 0, size);
                    String content = bout.toString();
                    bout.close();
                    System.out.println("接收到的报文为:");
                    System.out.println(content);
                    String response = "recived message:" + content;
                    socket.getOutputStream().write(response.getBytes("utf-8"));
                    socket.getOutputStream().flush();
                    System.out.println("报文已发送,等待接收");
                } catch (Exception ex) {
                    ex.printStackTrace();
                    socket.close();
                    break;
                }
            }
        }
    }
}

Read the rest of this entry

,

背景

在还不知道图床这个工具之前,写文章都是手动将图片上传到七牛获取外链,十分的麻烦,也曾想过自己去写过一个工具实现,也是懒,一直没有实现,后来看到其他同事用的图床工具才知道早就有人解决了这个问题。最后为什么还要自己实现一个,主要是两个原因

  • 我用的图床工具是ipic,应该是mac中最受欢迎的工具,默认上传到新浪图床,工具没什么问题,但新浪图床会将图片压缩,这点让我很不爽,如果要解锁其他图床需要付费。
  • 稍微想了下,好像自己实现一个不是很难,而且自己有阿里云服务器,完全可以用来当作图片的文件服务器。

Read the rest of this entry

背景

最近入手了一台阿里云ECS,就寻思着搭建个个人博客,记录自己的一些技术研究,技术只有记下来才是属于你的,不记下来只是暂时属于你的。很多时候辛辛苦苦通宵熬夜研究技术解决了难题,如果当时没记下来下次要用的时候又得重新来一遍,永远不会成长。所以好记性不如烂笔头,学到新的东西要及时记下来,不仅对自己是技术积累的过程,也能惠及广大同行,何乐而不为。

Read the rest of this entry

,

背景

自己在阿里云上搭建了一个wordpress个人博客,习惯了用markdown写文章,实在不习惯用可视化编辑器,也曾试用过wordpress一些markdown插件,比如wp-editormd,也不能说不好,就是不习惯,试过markdown转html通过wordpress 代码编辑器直接贴代码,也不尽理想,主要有几方面的原因:

  • 我代码高亮用的是Google Syntax Highlighter for WordPress插件,无论是wp-editormd还是转的html都无法正确将代码专成插件指定的语法,插件也无法设置语法格式。
  • 转过来的一些样式不满意,所以每次都得手动调整,如果一两次还好,长期肯定接受不了。

还有一个很重要的原因在于作为一名重度markdown用户并且是资深程序员,我希望我能够控制转换的过程,所以就自己写了一个。刚开始的思路当然是去解析md文件,但感觉得不偿失,这样就相当于实现了一个markdown的解析器了,后面尝试用正则去转,效果还是相当可以。

Read the rest of this entry