zoukankan      html  css  js  c++  java
  • 几个经典的TCP通信函数

    前言

      在TCP通信中要使用到几个非常经典的函数( 点这里参考一个关于它们作用的形象比方 ),本文将对这几个函数进行一个简短的使用说明。

    socket函数

      函数作用:创建一个网际字节流套接字

      包含头文件:sys/socket.h ( 后面几个函数也一样 )

      函数原型:int socket ( int family, int type, int protocol )

      参数说明:

        family:指明协议族( 如AF_INET,AF_INET6,AF_LOCAL等 )

        type:指明套接字类型( 如SOCK_STREAM,SOCK_DGRAM等 )

        protocol:直接指明某种 family 和 type 的组合而无视前2个参数,如下图( 如果该参数为0则启用family和type的组合类型 ):

      返回值说明:成功返回描述符,失败返回-1。

    connect函数

      函数作用:与指定主机进行连接

      函数原型:int connect ( int sockfd, const struct sockaddr *servaddr, socklen_t addrlen );

      参数说明:

        sockfd:要建立连接的套接字(连接是以套接字为单位建立而不是主机 )

        servaddr:要连接主机的套接字地址结构

        addrlen:servaddr的大小

      返回值说明:若成功返回0,失败返回-1。

      特别说明:

        1. 该函数将激发三次握手

        2. 如果TCP客户没有收到SYN分节响应,则返回ETIMEOUT错误。

        3. 如果对客户的SYN的响应是RST,则表示SYN分节正确送到但没有服务,或者对方想取消这次连接,或者TCP接收到一个根本不存在的连接上的分节。这种情况将返回ECONNREFUSED错误。

        4. 如果客户发出的SYN分节在路由传递过程中出现了问题( 路由器返回主机不可达 ),则将返回EHOSTUNREACH或者ENETUNREACH错误。

    bind函数

      函数作用:把一个本地地址赋予一个套接字

      函数原型:int bind ( int sockfd, const struct sockaddr * myaddr, socklen_t addrlen )

      参数说明:

        sockfd:要绑定的套接字

        myaddr:要绑定的套接字地址结构

        addrlen:上述结构的大小

      返回值说明:若成功返回0,失败返回-1。

      特别说明:一般情况,服务器绑定一个INADDR_ANY( 任意型 )的地址就可以了,客户端不用绑定。

    listen函数

      函数作用:把一个未连接的套接字转换成被动套接字

      函数原型:int listen ( int sockfd, int backlog )

      参数说明:

        sockfd:要转换的套接字

        backlog:未完成队列+已完成队列的长度和

      返回值说明:若成功返回0,失败返回-1。

    accept函数

      函数作用:从已完成队列返回下一个已完成连接。

      函数原型:int accept ( int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen )

      参数说明:

        sockfd:监听套接字描述符

        cliaddr:请求连接端的套接字地址结构

        addrlen:cliaddr的大小

      返回值说明:若成功返回非负描述符,失败返回-1。

      特别说明:

        1.一般情况下,一个服务器仅仅只有一个监听套接字,但是对每个服务请求都会创建一个已连接套接字。

        2.已连接套接字在每次循环后都会关闭,但监听套接字在服务器有效期间都会开放。

  • 相关阅读:
    [WM]谁抢走了应用程序的性能?
    只有更烂的程序员
    [WM]n久以前写的ConnMgr类
    [WM][转]PPC中如何找到正在使用中的网络(源代码)
    让IE6支持minwidth和maxwidth的方法(JS实现) + (CSS实现)
    jQuery tab 切换函数
    wap、3g手机的端的网页头部
    复制到系统剪贴板之IE,ff兼容版
    鼠标滑过展开,js版和jquery版
    JS+CSS实现网页滚动条美化
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3560541.html
Copyright © 2011-2022 走看看