文章目录

  • 1. 什么是socket?
    • 1.1 意义
    • 1.2 本质
    • 1.3 应用
    • 1.4 结论
  • 2. socket() 函数参数介绍
    • 2.1 参数1:int af
    • 2.2 参数2:int type
    • 2.3 参数3:int protocol
  • 3. socket()函数返回值介绍

1. 什么是socket?

套接字函数创建一个绑定到特定传输服务提供者的套接字。

将底层复杂的协议体系,执行流程,进行了封装,封装完的结果,就是一个SOCKET了,也就是说,SOCKET是我们调用协议进行通信的操作接口。

1.1 意义

将复杂的协议过程与我们编程人员分开,我们直接操作一个简单SOCKET就行了,对于底层的协议过程细节,完全不用知道,这就大大方便了我们。

网络编程难就难在协议本身的复杂性,简单就简单在我们编程层面完全不用考虑那些。

1.2 本质

本质就是一种数据类型,转定义下看类型

  • 就是一个整数(unsigned int

  • 但是这个数是唯一的

    • 标识着我们当前的应用程序,协议特点等信息
    • ID,门牌号

1.3 应用

我们网络通信的函数,全部都要使用SOCKET

逻辑:

每个客户端有一个SOCKET,服务器有一个SOCKET,通信时候,就需要这个SOCKET做参数,给谁通信,就要传递谁的SOCKET。

1.4 结论

网络编程,理论层面SOCKET是网络封装的精华,代码层面就是不停的使用SOCKET这个变量,所以又叫SOCKET编程。

2. socket() 函数参数介绍

SOCKET WSAAPI socket(int af, //地址族规范。 地址族的可能值在Winsock2.h头文件中定义。int type,//新套接字的类型规范。int protocol//要使用的协议。
);

SOCKET socketServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

2.1 参数1:int af

地址族规范。 地址族的可能值在Winsock2.h头文件中定义。

在为Windows Vista和更高版本发布的Windows SDK上,头文件的组织已更改,并且地址族的可能值在Ws2def.h头文件中定义。 请注意,Ws2def.h头文件自动包含在Winsock2.h中,并且绝对不能直接使用。

当前支持的值为AF_INET或AF_INET6,这是IPv4和IPv6的Internet地址族格式。 如果安装了地址族的Windows套接字服务提供程序,则支持地址族的其他选项(例如,与NetBIOS一起使用的AF_NETBIOS)。 请注意,AF_地址族和PF_协议族常量的值是相同的(例如,AF_INET和PF_INET),因此可以使用任何一个常量。

下表列出了地址系列的常用值,尽管许多其他值也是可能的。

Af Meaning
AF_UNSPEC 0 地址族未指定。
AF_INET 2 Internet协议版本4(IPv4)地址族。
AF_IPX 6 IPX / SPX地址族。 仅当安装了NWLink IPX / SPX NetBIOS兼容传输协议时,才支持此地址系列。WindowsVista和更高版本不支持此地址系列。
AF_APPLETALK 16 AppleTalk地址族。 仅当安装了AppleTalk协议时才支持此地址系列。WindowsVista和更高版本不支持此地址系列。
AF_NETBIOS 17 NetBIOS地址族。 仅当安装了用于NetBIOS的Windows套接字提供程序时,才支持此地址系列。在32位版本的Windows上支持用于NetBIOS的Windows套接字提供程序。 默认情况下,此提供程序安装在32位版本的Windows上.NetBIOS的Windows套接字提供程序在64位版本的Windows(包括Windows 7,Windows Server 2008,Windows Vista,Windows Server 2003或Windows XP)上不受支持。 用于NetBIOS的Windows套接字提供程序仅支持将* type 参数设置为* SOCK_DGRAM **的套接字。用于NetBIOS的Windows套接字提供程序与[NetBIOS]不直接相关(https://docs.microsoft.com/en -us / previous-versions / windows / desktop / netbios / portal)编程界面。 Windows Vista,Windows Server 2008和更高版本不支持NetBIOS编程接口。
AF_INET6 23 Internet协议版本6(IPv6)地址族。
AF_IRDA 26 红外数据协会(IrDA)地址族。仅当计算机安装了红外端口和驱动程序时,才支持此地址族。
AF_BTH 32 蓝牙地址系列。如果计算机安装了蓝牙适配器和驱动程序,则Windows XP SP2或更高版本支持此地址系列。

2.2 参数2:int type

新套接字的类型规范。
套接字类型的可能值在Winsock2.h头文件中定义。
下表列出了Windows套接字2支持的type参数的可能值:

Type Meaning
SOCK_STREAM 1 一种套接字类型,可通过OOB数据传输机制提供顺序的,可靠的,双向的,基于连接的字节流。 此套接字类型将传输控制协议(TCP)用于Internet地址系列(AF_INET或AF_INET6)。
SOCK_DGRAM2 一种支持数据报的套接字类型,这些数据报是无连接的,不可靠的最大长度固定(通常很小)的缓冲区。 此套接字类型对Internet地址系列(AF_INET或AF_INET6)使用用户数据报协议(UDP)。
SOCK_RAW3 提供原始套接字的套接字类型,该套接字允许应用程序操作下一个上层协议标头。 要操作IPv4标头,必须在套接字上设置IP_HDRINCL套接字选项。 要操作IPv6标头,必须在套接字上设置IPV6_HDRINCL套接字选项。
SOCK_RDM4 提供可靠消息数据报的套接字类型。 这种类型的一个示例是Windows中的实用通用多播(PGM)多播协议实现,通常称为可靠多播编程。仅当安装了可靠多播协议时才支持此* type *值。
SOCK_SEQPACKET5 一种套接字类型,可根据数据报提供伪流数据包。

在Windows套接字2中,引入了新的套接字类型。 应用程序可以通过WSAEnumProtocols函数动态发现每个可用传输协议的属性。 因此,应用程序可以确定地址族的可能套接字类型和协议选项,并在指定此参数时使用此信息。 随着新套接字类型,地址族和协议的定义,Winsock2.h和Ws2def.h头文件中的套接字类型定义将定期更新。

在Windows套接字1.1中,唯一可能的套接字类型是SOCK_DGRAM和SOCK_STREAM。

2.3 参数3:int protocol

要使用的协议。 protocol参数的可能选项特定于指定的地址族和套接字类型。 在Winsock2.h和Wsrm.h头文件中定义了协议的可能值。

在为Windows Vista和更高版本发布的Windows SDK上,头文件的组织已更改,并且此参数可以是Ws2def.h头文件中定义的IPPROTO枚举类型的值之一。 请注意,Ws2def.h头文件自动包含在Winsock2.h中,并且绝对不能直接使用。

如果指定的值为0,则调用者不希望指定协议,服务提供商将选择要使用的协议。

当af参数为AF_INET或AF_INET6且类型为SOCK_RAW时,在IPv6或IPv4数据包头的协议字段中设置为协议指定的值。

下表列出了该协议的通用值,尽管许多其他值也是可能的。

protocol Meaning
IPPROTO_ICMP1 The Internet Control Message Protocol (ICMP). This is a possible value when the af parameter is AF_UNSPEC, AF_INET, or AF_INET6 and the type parameter is SOCK_RAW or unspecified.This protocol value is supported on Windows XP and later.
IPPROTO_IGMP2 The Internet Group Management Protocol (IGMP). This is a possible value when the af parameter is AF_UNSPEC, AF_INET, or AF_INET6 and the type parameter is SOCK_RAW or unspecified.This protocol value is supported on Windows XP and later.
BTHPROTO_RFCOMM3 The Bluetooth Radio Frequency Communications (Bluetooth RFCOMM) protocol. This is a possible value when the af parameter is AF_BTH and the type parameter is SOCK_STREAM.This protocol value is supported on Windows XP with SP2 or later.
IPPROTO_TCP6 The Transmission Control Protocol (TCP). This is a possible value when the af parameter is AF_INET or AF_INET6 and the type parameter is SOCK_STREAM.
IPPROTO_UDP17 The User Datagram Protocol (UDP). This is a possible value when the af parameter is AF_INET or AF_INET6 and the type parameter is SOCK_DGRAM.
IPPROTO_ICMPV658 The Internet Control Message Protocol Version 6 (ICMPv6). This is a possible value when the af parameter is AF_UNSPEC, AF_INET, or AF_INET6 and the type parameter is SOCK_RAW or unspecified.This protocol value is supported on Windows XP and later.
IPPROTO_RM113 The PGM protocol for reliable multicast. This is a possible value when the af parameter is AF_INET and the type parameter is SOCK_RDM. On the Windows SDK released for Windows Vista and later, this protocol is also called IPPROTO_PGM.This protocol value is only supported if the Reliable Multicast Protocol is installed.

3. socket()函数返回值介绍

SOCKET socketServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (INVALID_SOCKET == socketServer)
{int a = WSAGetLastError();printf("socket function failed with error = %d\n", a);//清理网络库WSACleanup();return 1;
}closesocket(socketServer);

如果没有发生错误,socket将返回一个引用新socket的描述符。否则,将返回INVALID_SOCKET 的值,并且可以通过调用WSAGetLastError检索特定的错误代码。

Error code Meaning
WSANOTINITIALISED A successful WSAStartup call must occur before using this function.
WSAENETDOWN The network subsystem or the associated service provider has failed.
WSAEAFNOSUPPORT The specified address family is not supported. For example, an application tried to create a socket for the AF_IRDA address family but an infrared adapter and device driver is not installed on the local computer.
WSAEINPROGRESS A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function.
WSAEMFILE No more socket descriptors are available.
WSAEINVAL An invalid argument was supplied. This error is returned if the af parameter is set to AF_UNSPEC and the type and protocol parameter are unspecified.
WSAEINVALIDPROVIDER The service provider returned a version other than 2.2.
WSAEINVALIDPROCTABLE The service provider returned an invalid or incomplete procedure table to the WSPStartup.
WSAENOBUFS No buffer space is available. The socket cannot be created.
WSAEPROTONOSUPPORT The specified protocol is not supported.
WSAEPROTOTYPE The specified protocol is the wrong type for this socket.
WSAEPROVIDERFAILEDINIT The service provider failed to initialize. This error is returned if a layered service provider (LSP) or namespace provider was improperly installed or the provider fails to operate correctly.
WSAESOCKTNOSUPPORT The specified socket type is not supported in this address family.

socket编程:socket()函数详解相关推荐

  1. linux socket编程 accept函数详解

    int accept(int sockfd,struct sockaddr * addr,socklen_t * addrlen); sockfd的参数为listen()函数返回的监听套接字: add ...

  2. Linux Socket API Connect 函数详解

    在讲解套接字编程函数之前,有必要对socket编程的两个不可或缺的结构体进行说明. 第一个结构体式struct sockaddr..这个结构为许多类型的套接字储存套接字地址信息: Sockaddr结构 ...

  3. Linux socket下read函数详解

    在socket中服务器与客户端进行通信,当其中一方调用close(即这一方会发送一个fin)关闭套接字之后,另一方read()会返回一个0. 服务器开两个进程,一个用于接收客户端发送的数据,另一个进程 ...

  4. linux网络编程常用函数详解与实例(socket--bind--listen--accept)

    常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...

  5. Window编程主函数详解

    Windows编程中主函数是非常重要的,但是却在编写上非常简单(可能我这个初学者还不是很理解),有的时候我们.总体上可以分为这几个部分. 第一个是主函数的生命 WinMain(),这个含函数在百度上是 ...

  6. Windows编程—BroadcastSystemMessage函数详解

    介绍 BroadcastSystemMessage函数 可以发送一个消息给指定一类接受者(从Broadcast就可以看出,广播的意思).这里的接受者可以是,一般的应用程序.可装载的驱动程序.网络驱动程 ...

  7. Linux文件编程常用函数详解——lseek()函数

    lseek()函数的头文件和形式: #include <sys/types.h> #include <unistd.h> off_t lseek(int filedes, of ...

  8. socket编程流程及函数详解

    socket编程流程及函数详解-服务器端 一.创建socket 二.命名socket 2.1通用的socket地址结构体 2.2专用socket地址 三.监听socket 四.接受连接 五.总结 一. ...

  9. 常用socket函数详解

    常用socket函数详解 关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄 ...

  10. linux Socket send与recv函数详解

    转自:http://www.cnblogs.com/blankqdb/archive/2012/08/30/2663859.html linux send与recv函数详解 1 #include &l ...

最新文章

  1. 判断二叉树是否为平衡二叉树
  2. cdoj916-方老师的分身 III 【拓扑排序】
  3. [LOJ3153] 三级跳(单调栈 + 线段树)
  4. css两列显示,div+css如何控制信息分两列显示?
  5. sun.misc jar包
  6. POJ 3294 Life Forms
  7. 限时下载 | 132G编程资料:Python、JAVA、C,C++、机器人编程、PLC,入门到精通~
  8. 我的OpenCV4学习之旅(1)-OpenCV4初步了解
  9. 32位和64位CPU操作系统的区别
  10. 胜负无定数,敢搏成七分
  11. 夏にありがとう(向夏天致谢)-因幡晃
  12. hdu 4417 Super Mario
  13. 关于使用Navicat,Mysql Workbench,PowerDesigner根据mysql数据库生成ER(实体联系图)的解决方案的总结
  14. Vue Video.js播放m3u8视频流格式(video+videojs-contrib-hl)
  15. python蜂鸣器天空之城频率_用python来一首钢琴solo天空之城
  16. 【杰理AC695X】7脚屏PWM控制亮度
  17. ALTER TABLESPACE COALESCE
  18. CMMI的五个级别及其特征简述
  19. Jetson nano 摄像头二维码识别 Opencv zbar QT
  20. 西部网盘 如何去掉硬盘wd drive unlock

热门文章

  1. HDU-6386 Age of Moyu (想法+迪杰斯特拉)
  2. ADB实用命令(配合bat实现自动手机自动操作,如打卡、签到)
  3. linux 原城关机,中标普华Linux操作系统成功解决方案
  4. 近日移动硬盘和硬盘盒的选购
  5. 本机dns服务器地址
  6. DIY个人智能家庭网关—— python篇之获取路由器外网地址
  7. All - 博文总纲
  8. mount查看linux分区大小,【128】Linux 中磁盘空间查询df、du和分区fdisk和挂载mount
  9. linuxprobe 第0章
  10. H5跳回小程序的wx.miniProgram.navigateTo不起效果,无法跳转页面,已解决