• 计算机网络·实验一:


    程序流程:

    1.初始化套接字。

    2.代理服务器运行,不断监听

    3.当客户端连接之后,读取客户端的 HTTP 请求报文,通过请求行中的 URL,解析客户期望访问的原服务器 IP 地址; 创建访问原(目标)服务器的 TCP 套接字转发给客户端

    4.将 HTTP 请求报文转发给目 标服务器,接收目标服务器的响应报文

    5.当收到响应报文之后,将响应 报文转发给客户端,最后关闭套接字,等待下一次连接。

    1.使用Socket的应用程序在使用Socket之前必须首先调用 WSAStartup函数 调用WSAStartup(wVersionRequested, &wsaData)启动,

    这里的wVersionRequested是WSADATA类型

    2.创建套接字: 

     //socket()函数创建与指定的服务提供者绑定套接字
        //参数 af:指定协议的地址家族,通常使用AF_INET
        //参数 type:指定的套接字类型,SOCK_STREAM(TCP), SOCK_DGRAM, SOCK_RAW
        //参数 protocal:套接字使用的协议
        //socket() 函数执行成功,返回新Socket的句柄,调用失败返回INVALID_SOCKET
        //假如调用socket() 函数创建Socket后,该Socket就存在一个命名空间中,但并没有为其指定一个名称
        SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    3.绑定套接字:

    bind(ProxyServer, (SOCKADDR*)&ProxyServerAddr, sizeof(SOCKADDR)) == SOCKET_ERROR;

    4.在while循环中监听端口:

    初始化时置服务器端的流套接字处于监听状态listen(ProxyServer, SOMAXCONN) == SOCKET_ERROR;

    服务程序调用accept函数从处于监听状态的流套接字sd的客户连接请求队列中取出排在最前的一个客户请求,并且创建一个新的套接字来与客户套接字创建连接通道

    启动线程来处理客户事件。

    5.在线程中分配每个线程的空间,并且处理客户端的http请求。

    获取请求之后对http头进行解析,并缓存收到的一切内容,在文件中查找该http中的url并将文件名存为它的url。假如没有这个文件,就发新的请求,假如有,就在本地读取并显示。有缓存时,判断返回的状态码是否是304,若是则将缓存的内容发送给客户端。假如被屏蔽,打印字符串显示被屏蔽的信息,如果被钓鱼,就跳转到被钓鱼的网址,把主机名给修改了。如果过程中出现错误,就关闭该套接字,并结束该条进程。

    6.最后关闭代理服务器套接字,调用WSACleanup();结束程序。

    流程图:

  • 相关阅读:
    打卡规则小模块设计
    json和ajax学习
    求两个数的百分比&时间格式化&ajax返回json
    spring security运行流程图(转)
    DelegatingFilterProxy作用浅析
    网站URL重写(Java UrlRewrite 的使用)
    JVM的常用的调优策略和垃圾回收算法及Tomcat的常用调优参数
    JQuery 的Ajax的使用
    servlet程序HTTP Status 500
    CanvasRenderingContext2D.drawImage()无效,not working
  • 原文地址:https://www.cnblogs.com/hitWTJ/p/9880225.html
Copyright © 2020-2023  润新知