zoukankan      html  css  js  c++  java
  • Linux 基本网络编程

    基本套接字分为客户机/服务器和点对点模式。

    C/S:sever/client---------------------------一般采用TCP

    B/S:browser/server-----------------------一般采用UDP

    常用的数据结构有in_addr(存储IP地址),sockaddr_in(表示Internet协议地址结构),sockaddr(存储主机IP地址和接口信息)。

    struct in_addr{
        union{
            struct{u_char, s_b1, s_b2, s_b3, s_b4} s_un_b;
            struct{u_short s_w1, s_s2;} s_un_w;
            u_long s_addr;
      } s_un;
    }
    struct sockaddr_in{
        short sin_family;                //AF_INET
        u_short sin_port;               //16位端口号
        struct in_addr sin_addr;   //32位IP地址
        char sin_zero[8];
    };        
    struct sockaddr{
        unsigned short sa_family;
        char sa_data[14];
    };

    例子:

    in_addr test;
    test..s_un_b.s_b1=192;
    test..s_un_b.s_b2=168;
    test..s_un_b.s_b3=0;
    test..s_un_b.s_b4=1;
    struct sockaddr_in serverAddr;
    memst(&serverAddr,0,sizeof(struct sockaddr_in));
    serverAddr.sin_family=AF_INET;                          //AF_INET表示TCP
    serverAddr.sin_port=htons(80);
    serverAddr.sin_addr.s_addr=htonl(INADDR_ANY);           //INADDR_ANY表示当前所用的IP

    常用函数

    #incldue<sys/socket.h>
    
    //创建套接字
    SOCKET PASCAL FAR socket(int af, int type, int protocol)
    //af指定通信协议--AF_UNIX,AF_INET,AF_NS
    //type指定套接字类型,SOCK_STREAM(TCP),SOCK_DGRAM(UDP),SOCK_RAM(原始套接字)
    //protocol指定特定协议
    
    //套接字绑定
    int PASCAL FAR bind(SOCKET s, const struct sockaddr FAR *name, int namelen)
    //s指定要关联的套接字
    //name指定要绑定的IP地址与端口信息
    
    //侦听
    int PASCAL FAR listen(SOCKET s, int backlog)
    //backlog指定请求连接队列的最大长度,一般设为5
    
    //侦听,接受数据
    SOCKET PASCAL FAR accept(SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen)
    //s为当前指定的套接字
    //addr为保存当前客户端的地址信息
    
    //创建连接
    int PASCAL FAR connect(SOCKET s, const struct sockaddr FAR* name, int namelen)
    
    //TCP发送数据
    int PASACAL FAR send(SOCKET s, const char FAR* buf, int len, int flags);
    //s指定已经连接的套接字
    //buf表示待发送数据的缓冲区
    //flags用于设定发送控制参数,一般为0
    
    //TCP接受数据
    int PASACAL FAR recv(SOCKAET s,char FAR* buf,int len,int flags);
    
    //UDP发送数据
    ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)
    ssize_t recvform(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *from, socklen_t fromlen) 
    //sockfd表示已经创建好的一个UDP套接字 
    //to.from用于设置接受方和发送方的地址信息 
    //tolen,fromlen用于设置地址信息的长度

    例子:

    TCP:

    UDP:

  • 相关阅读:
    linux之awk命令
    HDU 2097 Sky数 进制转换
    HDU 2077 汉诺塔IV
    HDU 2094 产生冠军 dfs加map容器
    HDU 2073 叠框
    HDU 2083 简易版之最短距离
    HDU 2063 过山车 二分匹配
    天梯 1014 装箱问题
    天梯 1214 线段覆盖
    天梯 1098 均分纸牌
  • 原文地址:https://www.cnblogs.com/coder2012/p/2995827.html
Copyright © 2011-2022 走看看