函数描述

  • 头文件 <sys/types.h> <sys/socket.h>

  • 函数使用int socket(int domain, int type, int protocol);

  • 函数功能:创建一个通信的终点,并返回一个文件描述符来代表通信的终点

  • 函数参数:
    a. domain 代编当前创建的socket文件描述符使用的是哪一个协议族进行通信,这些协议族都包含在sys/socket.h,其中主要的协议族如下:

    • AF_UNIX, AF_LOCAL 本地进程通信
    • AF_INET IPV4网络传输层协议
    • AF_INET6 IPV6网络传输层协议
    • AF_IP IPX-Novell协议
    • AF_NETLINK 内核用户接口设备
      当前正式得协议族描述已经变为PF_INET。。。
      TCP/IP协议族如下

    b. type函数socket()的参数type用于设置套接字通信的类型,指定使用TCP/IP协议族中的哪个子协议进行通信,主要有SOCKET_STREAM(流式套接字)、SOCK——DGRAM(数据包套接字)

    • SOCK_STREAM 提供有序的、可靠的、双链接的、字节流数据传输;主要是用作TCP链接时的数据传输,此时如果想要使用TCP协议,则将domain设置为AF_INET即可
    • SOCK_DGRAM 支持无链接、不可靠的数据传输,数据传输时定长;主要时用作UDP链接时的传输
    • SOCK_SEQPACKET 提供有序的,可靠的,双链接的数据传输通道,数据长度定长,使用的时候需要将数据全部读出
    • SOCK_RAW RAW类型,提供原始网络协议访问;即此时我们使用的通信协议为IP 协议
    • SOCK_RDM 提供可靠的数据报文,不过可能数据会有乱序
    • SOCK_PACKET 当前通信类型已经过时,不应在通信程序中使用
    • SOCK_NOBLOCK 将socket返回的文件描述符指定为非阻塞的,类似SOCK_STREAM | SOCK_NOBLOCK 表示使用面向链接的数据传输同时非阻塞
    • SOCK_CLOEXEC 表示一旦进程执行exec系统调用之后,将会自动关闭socket返回的套接字文件描述符

    c. protocol 特例化来一个协议,用来指定协议号
    一般情况下protocol写0,表示使用domaintype指定的协议,不过如果domaintype所指定的协议有好几个时,此时就需要通过具体的协议号来区分,否则写0即可。
    所有的协议编号都被保存在了/etc/procotols下,tcp协议编号为6,udp协议编号为17

    ip   0   IP      # internet protocol, pseudo protocol number
    hopopt  0   HOPOPT      # IPv6 Hop-by-Hop Option [RFC1883]
    icmp    1   ICMP        # internet control message protocol
    igmp    2   IGMP        # Internet Group Management
    ggp 3   GGP     # gateway-gateway protocol
    ipencap 4   IP-ENCAP    # IP encapsulated in IP (officially ``IP'')
    ...
    

    类似如下
    socket (AF_INET, SOCK_STREAM,6);socket (AF_INET, SOCK_STREAM,0);都代表tcp协议

代码举例

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <errno.h>void print_err(char *str, int line, int err_no) {printf("%d, %s :%s\n",line,str,strerror(err_no));_exit(-1);
}int main()
{int skfd = -1;/*创建使用TCP通信的套接字文件描述符*/skfd = socket(AF_INET, SOCK_STREAM, 0);if ( -1 == skfd) {print_err("socket failed",__LINE__,errno);}return 0;
}

C语言网络编程:socket函数相关推荐

  1. go net.conn读取请求头信息_go语言网络编程socket sever的实现

    首先说一下socket,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket(百度百科). 图片来源于网络 其本质就是就是编程接口(API),对TCP.UDP的封装 ...

  2. 网络编程-----socket函数

    1.Socket()函数: 访问底层操作系统接口的全部方法,提供服务中心类,简化网络服务器的开发; 语法:socket.socket(family([,type,proto]]]) family: 套 ...

  3. 网络编程 socket函数参数介绍

    SOCKET参数: 1.地址的类型 a.AF_INET 2  internet协议版本4(ipv4)地址系列. b.AF_INET6 23  Internet协议版本6(ipv6)地址系列. c.AF ...

  4. C语言网络编程函数与相关结构汇总

    持续更新中- 服务器和客户端的一般流程 服务器端:socket()-->bind( )-->listen()-->accept()-->read()/write()---> ...

  5. 网络编程socket之connect函数

    网络编程socket api存在一批核心接口,而这一批核心接口就是几个看似简单的函数,尽管实际上这些函数没有一个是简单.connect函数就是这些核心接口的一个函数,它完成主动连接的过程. conne ...

  6. 网络编程socket之accept函数

    网络编程socket之accept函数 摘要:对于服务器编程中最重要的一步等待并接受客户的连接,那么这一步在编程中如何完成,accept函数就是完成这一步的.它从内核中取出已经建立的客户连接,然后把这 ...

  7. C语言网络编程:多路IO select实现多客户端

    文章目录 阻塞式的服务器程序 多线程服务器程序 非阻塞式服务器程序 基于事件响应的服务器程序 事件响应服务器程序的实现`select` 阻塞式的服务器程序 我们接触过最多的最基础的网络通信模型为TCP ...

  8. Python网络编程socket

    网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...

  9. 树莓派:入门(基础配置、GPIO、网络编程 Socket)

    树莓派在创客中越来越发挥重要的作用,树莓派的强大兼用性和功能丰富,得到 DIY 朋友的青睐.带大家认识目前最新的树莓派 3B+,从零基础到入门,到动手做有趣的应用. 本场 Chat 首先会带领大家入门 ...

  10. C语言网络编程(3)— 通过DNS连接到百度

    C语言网络编程(3)- 通过DNS连接到百度 一.gethostbyname()函数 我们现在认知一台计算机主机通常采用直观可读的名字.例如百度我们会记住 www.baidu.com 而不是他的IP地 ...

最新文章

  1. 对Linux Kernel 4.15的支持的VirtualBox 5.2.8发布
  2. 云原生微服务架构的技术内涵
  3. 大咖说:React Native 全埋点实现原理(内附赠书)
  4. Hdu 1754 . I Hate It
  5. 如何将JAR添加到Jetbrains MPS项目
  6. java ajax 定时刷新_用ajax技术实现无闪烁定时刷新页面
  7. Web端调用Outlook 的发信窗口
  8. Mac OS 搭建phonegap开发环境
  9. “华为杯”第十八届中国研究生数学建模竞赛一等奖经验分享
  10. 弦图(Chordal Graph)学习小记
  11. C语言统计1到100素数的个数,统计1到100素数的个数
  12. 企业研发人员配备比例_高新技术企业对研发技术人员占企业总职工人数的比例为多少?...
  13. PTA 7-28猴子选大王(约瑟夫问题)
  14. 苹果手机显示有4g上不了网络连接服务器,苹果移动数据为什么叫蜂窝网络_蜂窝移动数据和4g有什么区别...
  15. LeetCode_回文数(三种解法-Java)
  16. 如何跨网络远程操作另一台计算机,如何远程控制另一台电脑?
  17. python爬取喜马拉雅FM音频
  18. [NFC]NDEF和RTD协议介绍
  19. 0基础学RS(三)路由器基本配置
  20. __init__() takes 1 positional argument but 5 positional arguments (and 1 keyword-only argument) were

热门文章

  1. CodeForces 595A
  2. mysql操作数字名称的schema时字符的逃逸问题
  3. php去除字符串首尾空格(包括全角)(转)
  4. 接口有个电池标志_USB接口上的小标签有啥用?从“+”号到闪电的奥秘
  5. fcm算法的MATLAB实现,FCM算法的matlab程序(初步)
  6. 基于python的证件照_20行代码教你用python给证件照换底色的方法示例
  7. mysql存储过程查询实例_mysql存储过程查询实例
  8. python获取天气分析_Python爬取南京市往年天气预报,使用pyecharts进行分析
  9. 同源策略禁止读取位于_用浏览器缓存绕过同源策略(SOP)限制
  10. java for嵌套for循环语句_java中的for循环嵌套语句怎么执行?