网络编程第二章总结(函数介绍)

常用函数

  • socket()函数:

    系统函数socket()用于创建一个新套接字,调用成功返回一个套接字描述符(即:一个整型的数值),出错则返回-1。

    int socket(int domain, int type, int protocol)


    int s=socket(PF_INET,SOCK_STREAM, 0)
    • domain:指明建立socket所使用的协议族,通常赋值为符号常量PF_INET,表示互联网协议族(TCP/IP协议族);
    • type:指定创建该socket的应用程序所希望采用的通信服务类型。同一协议簇可能提供多种不同的服务类型,TCP/IP协议族可提供数据流(TCP)和数据报(UDP)两种服务类型。为此,该参数通常赋值为符号常量SOCK_STREAM (表示数据流服务类型)或SOCK_DGRAM(表示数据报服务类型)。
    • protocol:指明该socket所使用的具体协议的协议号。在TCP/IP协议族中,由于用domain和type这两个参数一般即可惟一确定一个协议,因此在TCP/IP协议族中,protocol参数通常赋值为0。
    • 在通过socket()函数建立了一个socket之后,在使用该socket进行网络通信以前,还必须配置该socket。
  • connect()函数:

    在面向连接的客户端程序中,采用系统函数connect()来配置socket,并与远端服务器建立一个TCP连接,connect()函数若执行成功,将返回一个整型数值,若出错则返回-1。

    int connect(int sockfd,struct sockaddr* serv_addr, int addrlen)


    retValue = connect(s, (LPSOCKADDR)&serverAddr, sizeof(serverAddr))

    • sockfd:套接字文件描述符,它是由系统函数socket()返回的。
    • serv_addr:指向数据结构sockaddr的指针,其中包含远端机器的端点地址(远端机器的端口号和IP地址)。
    • addrlen:远端地址结构serv_addr的长度,可以使用sizeof(struct sockaddr)来获得。
  • bind()函数:

    系统函数bind()用于将socket与本机的一个端点地址(端口号+IP地址)相关联,若调用成功返回一个整型数值,出错则返回-1。

    int bind(int sockfd, struct sockaddr my_addr, int addrlen)


    errCode = bind(s, (SOCKADDR)&addr, addr_len)

    • sockfd:是系统函数socket()返回的套接字描述符。
    • my_addr:指向数据结构sockaddr的指针,其中包含本机的端点地址,在给结构指针变量m_addr赋值时,可通过将my_addr.sin_port置为0来自动选择一个未占用的端口号,通过将my_addr.sin_addr.s_addr置为INADDR_ANY来自动填入本机IP地址。
    • addrlen:本机地址结构my_addr的长度,可以使用sizeof(struct sockaddr)来获得。

      在调用bind()函数时,需要将sin_port和s_addr转换成为网络字节优先顺序。另外,调用bind()函数时一般不要将端口号设置为小于1024的值,因为1到1024是保留端口号。
  • listen()函数:

    系统函数listen()用于使socket处于被动的监听模式,并为该socket建立一个输入数据队列,将到达的客户服务请求保存在此队列中,直到程序处理它们。调用成功返回一个整型数值,出错则返回-1。

    int listen(int sockfd, int backlog)

    • sockfd:是系统函数socket()返回的套接字描述符.
    • backlog:指定进入等待连接队列中所允许的连接的个数,进入队列的客户连接请求在获得应答之前将在等待连接队列中等待。这个值是队列中最多可以拥有的客户请求的个数。大多数系统的缺省设置为20,也可以设置为5或10。如果一个客户请求到来时,输入队列已满,则socket将拒绝客户的连接请求,客户将收到一个出错信息。
  • accept()函数:

    系统函数accept()用于从等待连接队列(该等待连接队列为系统函数listen()所创建)中抽取第一个客户连接请求,然后建立与该客户之间的连接,并为该接连创建一个新的套接字(该新套接字将复制系统函数socket()所创建的那个原套接字中的部分信息,主要包括协议类型,协议操作等),此后,就由这个新的套接字来负责通过与该客户之间的连接与该远端客户进行通讯。

    int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)

    • sockfd:是系统函数socket()返回的套接字描述符
    • addr:是一个用于回传的指向数据结构sockaddr的指针,accept()函数将从客户的连接请求之中自动抽取远端客户主机的端点地址信息并存入到该addr指针所指向的数据结构之中.
    • addrlen:远端地址结构addr的长度,可以使用sizeof(struct sockaddr)来获得。
  • send()函数(TCP专属):

    系统函数send()用于给TCP连接的另一端发送数据,其中,客户程序一般用send()函数向服务器发送请求,而服务器则通常调用send()函数来向客户程序发送应答。send()函数用于面向连接的套接字,send()函数和write()函数唯一的不同点是标志的存在,当标志为0时,send()函数等同于write()函数。

    ssize_t send(int s, const void *buf, size_t len, int flags)

    • s:指明用来发送数据的套接字描述符.
    • buf:指明一个存放应用程序要发送数据的缓冲区。
    • len:指明实际要发送的数据的字节数。
    • flags:指明调用执行方式,一般设置为0。
  • recv()函数(TCP专属):

    系统函数recv()用于客户端和服务器程序从TCP连接的接收来自另一端的数据,recv()函数只可用于基于连接的套接字,recv()函数和read()函数唯一的不同点是标志的存在,当标志为0时,recv()函数等同于read()函数。

    int recv(int s, void *buf, int len, unsigned int flags)

    • s:指明用来接收数据的套接字描述符.
    • buf:指明一个应用程序用来存放接收到的数据的缓冲区
    • len:指明缓冲区的长度
    • flags:指明调用执行方式,一般设置为0。
  • sendto()函数(UDP专属):

    系统函数sendto()用于在无连接的数据报socket方式下进行数据的发送,由于在无连接的数据报socket方式下,本地socket并没有与远端机器之间建立连接,因此,在调用sendto()函数来发送数据时应指明目的机器的端点地址。与send()函数类似,sendto()函数也返回实际发送的数据字节长度或在出现发送错误时返回-1。

    int sendto(int sockfd, const void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen)

    • sockfd:指明用来发送数据的套接字描述符
    • msg:指明一个存放应用程序要发送数据的缓冲区
    • len:指明缓冲区的长度
    • flags:指明调用执行方式,一般设置为0。
    • to:是一个指向数据结构sockaddr的指针,其中包含远端机器上的对等方套接字的端点地址。在客户端,该参数中所包含的远端机器的端点地址即为服务器的IP地址和熟知端口号。
    • tolen:远端地址结构serv_addr的长度,可使用sizeof (struct sockaddr) 来获得。
  • recvfrom()函数(UDP专属):

    系统函数recvfrom()用于实现在无连接的数据报socket方式下进行数据的接收,与recv()函数类似,recvfrom()函数也返回实际接收到的数据字节长度或在出现接收错误时返回-1。

    int recvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen)

    • sockfd:指明用来接收数据的套接字描述符
    • buf:指明一个存放应用程序用于接收数据的缓冲区
    • len:指明缓冲区的长度
    • flags:指明函数执行方式,一般设置为0。
    • from:是一个指向数据结构sockaddr的指针,用于存放远端机器上的对等方套接字的端点地址。
    • romlen:远端地址结构serv_addr的长度,可使用sizeof (struct sockaddr) 来获得。
  • close()函数:

    系统函数close()用于在服务器与客户端之间的所有数据收发操作结束以后关闭套接字、以释放该套接字所占用的资源。close()函数若调用成功将返回0,若出错则返回-1。'

    int close(sockfd)

以上函数仅为一部分复习用,后面会出一个精简版的(函数种类会更多)

posted on 2020-11-06 17:34  千丶颜  阅读(140)  评论(0编辑  收藏  举报