美文网首页
Socket原理理解

Socket原理理解

作者: BigBossZhu | 来源:发表于2016-11-10 01:16 被阅读37次

    Socket原理和应用(套接字),网络底层其实就是socket.即时通信用的很多.

    纯C语言的.理解知道网络请求是怎么发送数据的.
    网络三要素:ip地址,端口,协议(怎么传UDP/TCP).
    ip地址找主机,端口找服务器,协议传输数据.
    本地回环地址:127.0.0.1 主机名:localhost.
    ip地址:过交换机回来.ping不通说明网线有问题.

    端口号:保留0-1024,只能使用后面1024-某个值

    UDP:用户数据包协议
    TCP:传输控制协议

    原理:用于在两个客户端与服务器中间进行通信,是TCP\IP的上一层协议.有两个基本概念,客户方(发起请求的一方)和服务方(接收请求的一方)是相对的.两个应用程序首先需要建立socket连接,需要知道服务方的IP地址或机器名称,需要一个约定端口(Port)来确定方式呼叫服务方.但是服务方必须处于监听状态,接受到连接请求,然后建立连接(可以建立也可以拒绝).
    发送的消息类型:文本或二进制.

    通过ip找主机,通过端口号找程序.

    客户方消息到达服务方端口时,会自定触发事件,服务方只要接管事件就可以了,就可以接受到客户方的消息了.

    1. 导入头文件
    2. 创建客户方socket
    3. 连接服务器
    4. 发送数据
    5. 接收数据
    //1. 导入
    #import <sys/socket.h>
    #import <netinet/in.h>
    #import <arpa/inet.h>
    //2. 创建(可能成功失败)
    self.clientSocket = socket(AF_INET, SOCK_STREAM, 0);
    //3. 连接(可能成功失败)
    connect(self.clientSocket, (const struct sockaddr *)&severAddress, sizeof(severAddress))
    //4. 发送
    send(self.clientSocket,msg.UTF8String, strlen(msg.UTF8String), 0)
    //5. 接收
    recv(self.clientSocket, buffer, sizeof(buffer), 0)
    
    //6. 关闭
    close(self.clientSocket); 
    
    OVER既可以接收又可以发送了
    
    

    都是C语言程序.代码不用记住,理解就好了.

    建立请求的过程,发送数据的原理

    请求行:指定请求方法,请求资源路径以及HTTP协议版本.
    GET / HTTP/1
    请求头:对客户端的环境描述,至少要包含主机地址.
    还可以包含以下信息

    1. 客户端类型:
      User-Agent:iPhone AppleWebKit
    2. 客户端能接收到的数据类型
      Accept: text/html
      等等
      请求体:客户端发给服务器的数据,例如要上传的数据.

    请求项之间\r\n,最后一个请求项\r\n\r\n两个.

    // 发送内容给服务器
    //    NSString *msg = @"如何成为牛逼的程序员";
        // 协议头://主机地址/路径
        // http://localhost/aaa.txt
        / *GET:请求方式 /:路径 HTTP:协议头 */
        主机地址:Host:m.qidian.com
        NSString *request = @"GET / HTTP/1.1\r\n"
        "Host:m.qidian.com\r\n"
        "Connection:Close\r\n"
        "User-Agent:iPhone AppleWebKit\r\n\r\n";
        NSString *resultStr = [self sendAndRecv:request];
    

    理解获取数据的意思


    Snip20161110_3.png

    发送请求,服务器返回实体内容给我们.这就是我们需要的数据.

    相关文章

      网友评论

          本文标题:Socket原理理解

          本文链接:https://www.haomeiwen.com/subject/yjwtpttx.html