最近项目开发用到socket,socket能进行ip连接我知道,但是如果服务端提供的是“带参数的url”要怎么处理呢?
有大神指导下不?

解决方案 »

  1.   

    先获取到ip,在通过socket创建。参考:
    struct hostent *he; 
            he = gethostbyname( argv[1]);
            char destIP[128];
            char **phe = NULL;
            for( phe=he->h_addr_list ; NULL != *phe ; ++phe){
                    inet_ntop(he->h_addrtype,*phe,destIP,sizeof(destIP));
                    printf("%s\n",destIP);
      

  2.   


    这样的话只是单纯的得到ip地址,那url的参数呢?怎么处理
      

  3.   

    假设url是这样的https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.rsacryptoserviceprovider?redirectedfrom=MSDN&view=netframework-4.8,要怎么处理,用socket
      

  4.   

    没有任何必要去手写这一套东西。
    没有任何必要去手写这一套东西。
    没有任何必要去手写这一套东西。
    建议用适合的工具去做适合的事。你的需求可以用http服务器来实现。要么自己写一个http server,要么直接换一个web开发环境。
    HTTP本质上还是文本通信(在部分场景里会传输二进制数据),正常的流程是:客户端(浏览器、开发环境里的web client等等)向服务器发送Http请求,服务器处理以后返回Http响应。
    http请求可以去搜它的结构,就是纯文本,第一部分:请求类型、URI、协议 (比如GET/sample.jsp HTTP/1.1);第二部分:请求头部,里面有很多约束或者预置变量定义;第三部分就是请求的正文部分。类似地,http响应也有自己的格式定义,包含了状态码,响应头,响应正文。
    你的例子当中:
    https://docs.microsoft.com 位于第二部分,Host变量中;
    /zh-cn/dotnet/api/system.security.cryptography.rsacryptoserviceprovider位于第一部分,在URI部分;
    redirectedfrom=MSDN&view=netframework-4.8 位于第三部分正文中。
    事实上,如果不是为了学习目的想自己尝试实现一下,手写http服务器是很不明智的行为(从你问的问题来看,肯定不是因为学习目的)。
    socket在80端口侦听,收到文本了,判断它是不是合法的http请求(通过确认收到的文本是否符合第一部分的格式要求),然后从三个部分中摘取出你要的内容,处理完,拼出一个符合标准的http响应消息发送回去。另外,如果你是https协议,还需要自己实现https通信的加密过程。
    更合适的做法是,涉及到http服务,使用php、python、.Net、JAVA这些合适的工具去写一个WEB工程,然后部署到apache、tomcat、IIS、NGINX之类的web服务器中,而非用c去手写一个web服务端来实现。
      

  5.   


    现有的项目中有http协议端口,不过只能进行短连接,现需求实现长连接,所以想弄socket来实现这个功能。我这端是客户端来的
      

  6.   

    http就是短连接协议,一般不会有长连接的需求。请求一个资源,服务器返回给我。下次有需求了,我继续请求。就是这样的一个工作流程。如果一定要长连接,用websocket。
      

  7.   

    socket 建立的是tcp/udp 连接,属于传输层, http带url的地址已经算是应用层了,属于传输的数据,直接写在send里面就行了,按照http 头格式写