zoukankan      html  css  js  c++  java
  • socket基本

    1.socket 开发接口位于应用层与传输层之间,可以选择TCP与UDP2中传输层协议进行开发

    2.socket类型:

      流式socket,SOCK_STREAM:提供面向连接的,可靠的传输服务,可以采用全双工方式.同时接收和发送数据. 如ftp协议就是基于流式的. 一般选择

    tcp协议的话就是利用这种socket

      数据包式socket SOCK_DGRAM:提供面向无连接

    ,不可靠传输服务,如dns协议, 一般选择udp协议就利用这种socket

      原始SOCKET SOCK_RAW: 上面2种要么选择tcp,要么选择udp协议. 但使用原始socket就没有限制,可以在ip层上对socket进行编程.

    发送和接收ip层上原始数据包.如icmp

    3.winsock

      winsock有2个版本:winsock1.1和winsock2.2

      头文件,静态库包含,版本设置框架:

      2.2:

    #include <WinSock2.h>
    #pragma  comment(lib,"ws2_32.lib")
    
    
    void main()
    {
        WSADATA wsaData;//该结构体需要初始化后才能进行后续的socket api. 包含系统socket支持的信息
        if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
        {
            printf("error
    ");
            return;
        }
    
        //可以开始进行网络通信了
    
        //最后的清理工作
        if (WSACleanup()==SOCKET_ERROR)
        {
            printf("clean error
    ");
            return;
        }
    
    }

    4.IP地址表示形式

      网络字节序:低位存储数据的高位字,在网络中以便各种设备统一.

      通过in_addr结构体保存网络字节序的ip

      定义如下:

    in_addr

    The in_addr structure represents a host by its Internet address.

    typedef struct in_addr {
    union {
    struct {
    u_char s_b1,s_b2,s_b3,s_b4;
    } S_un_b;
    struct {
    u_short s_w1,s_w2;
    } S_un_w;
    u_long S_addr;
    } S_un; } in_addr;

    Members

    S_un
    S_un_b
    Address of the host formatted as four u_chars.
    S_un_w
    Address of the host formatted as two u_shorts.
    S_addr
    Address of the host formatted as a u_long

    2个重要函数:

    The inet_addr function converts a string containing an (Ipv4) Internet Protocol dotted address into a proper address for the IN_ADDR structure.

    unsigned long inet_addr(
      const char* cp);

    用于将字符串形式的点分10进制的ip地址转为unsigned long类型的网络字节序ip,可以被in_addr 使用.错误的ip将返回INADDR_NONE

    inet_ntoa()将in_addr 的网络字节序ip转为字符串的点分10进制ip

    主机字节序ip格式

    4个api:

    u_long htonl(u_long hostlong), 将u_long 类型的主机字节序ip转为网络字节序ip

    u_short htons(u_short hostshort),将u_short类型的主机字节序ip转为网络字节序ip

    u_long ntoh1(u_long netlong)将u_long类型网络字节序转为主机字节序

    u_short ntohs(u_short netshort)将u_short类型网络字节序转为主机字节序

    socket选项:

    int getsockopt(
      _In_    SOCKET s,
      _In_    int    level, //可以是这个SOL_SOCKET.
      _In_    int    optname, //查询的选项
      _Out_   char   *optval, //查询返回的值
      _Inout_ int    *optlen  //返回缓冲大小
    );
    

    有这些选项:SO_ACCEPTCONN,SO_TYPE 等

    int setsockopt(
      _In_       SOCKET s,
      _In_       int    level,
      _In_       int    optname,
      _In_ const char   *optval,
      _In_       int    optlen
    );
    和getsockopt类似.只是将值写进去
  • 相关阅读:
    YAOI Summer Round #4 (Div.2) 题解
    2021 暑假集训(福建师大附中)
    YAOI Round #7 题解
    YAOI Round #5 题解
    插头DP
    四边形不等式
    YAOI Round #3 题解
    关于 2020 年
    图论相关性质和结论(基础)
    斜率优化 DP :Luogu P2365 P5785「SDOI2012」任务安排 & 弱化版
  • 原文地址:https://www.cnblogs.com/freesec/p/6188133.html
Copyright © 2011-2022 走看看