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

    socket函数,为了执行网络I/O,一个进程必须做的第一件事就是调用socket函数,并且指定通信协议类型。

    #include<sys/socket.h>
    int socket (int family, int type, int protocol); //成功返回非负描述符,出错-1

    其中family参数指明了协议族,AF_INET(IPv4), AF_INET6(IPv6);type参数指明套接字的类型,SOCK_STREAM(字节流) , SOCK_DGRAM(数据包)。

    connet函数,TCP客户用connet函数来建立与TCP服务器的连接。

    #include<sys/socket.h>
    int connect(int sockfd, const struct sockadd* servaddr, socklet_addrlen);//成功返回0,出错-1

    sockfd是由socket函数返回的套接字描述符,第二,第三个参数分别是一个指向套接字地址结构的指针和该结构的大小。servaddr必须包含由服务器的ip地址和端口号。

    客户在调用connect函数前不必非得调用bind函数,内核会确定源ip,并选择一个临时端口。

    bind函数,bind函数把一个本地地址协议赋予一个套接字。

    #include<sys/socket.h>
    int bind(int sockfd,const struct sockaddr* myaddr,socklen_t addrlen);//成功返回0,出错-1

    myaddr是一个指向特定协议的地址结构的指针,啊ddr了addrlen是该地址结构的长度。对于TCP,调用bind函数可以制定ip地址,端口号。

    listen函数,仅由TCP服务器调用,当socket函数创建一个套接字的时候,默认创建出的是一个主动套接字,也就是说是一个将调用connect发起连接的客户套接字。listen函数把一个未连接的套接字转换成一个被动套接字,指示内核应接受指向该套接字的连接请求。

    #include<sys/socket.h>
    int listen(int sockfd, int backlog);// 成功返回0, 出错-1

    backlog为未完成连接队列与完成但未被应用进程接受队列长度之和。

    accept函数,由TCP服务器调用,用于从已完成连接队列头返回下一个已完成的连接,如果已完成连接队列为空,那么进程将阻塞。

    #include<sys/socket.h>
    int accept(int sockfd, struct sockaddr*cliaddr, socklen_t *addrlen)//成功非负描述字,出错-1

    参数cliaddr和addrlen用来返回已连接的对端进程的协议地址。如果accept成功,那么返回值是由内核自动生成的一个全新套接字,代表与客户的TCP连接。

  • 相关阅读:
    git笔记
    初试linux,cp、rm、mv、file、umask等命令粗略使用方法
    Linux的rwx
    nano的简单笔记
    windows10访问ftp中文乱码怎么办?
    Windows 将FTP 映射到本地文件夹 --简化操作
    计算地址掩码
    Can't connect to MySQL server on localhost (10061)解决方法
    微信小程序开发入门学习(2):小程序的布局
    微信小程序开发入门学习(1):石头剪刀布小游戏
  • 原文地址:https://www.cnblogs.com/nicganon/p/3920340.html
Copyright © 2011-2022 走看看