Linux 基本网络编程

系统 1751 0

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

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 基本网络编程


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论