如下图所示,是Socket通信的原理图,左侧为服务端,右侧是客户端,可以看到服务端的步骤要多一些,客户端将在后面讲解。本节开始将从左侧服务端第一步开始逐步讲解,本步骤目标为创建一个套接字,其返回值为后面的步骤使用。
下面我们开始正式进入Socket通信的第一步,这一步无论是客户端还是服务端都是需要的第一步,因此大家认真思考。
函数功能:
创建套接字
头文件:
#include <winsock2.h>
函数原型:
int socket( int af, int type, int protocol);
返回值类型:
整型
返回值:
成功返回非负值,表示套接字的文件描述符,失败返回-1,通常返回-1错误很可能是没有执行 WSAStartup初始化导致!
参数说明:
第一个参数af指明了协议族,通常用AF_INET、AF_INET6、AF_LOCAL等。AF表示地址族,选择 AF_INET 的目的就是使用 IPv4 进行通信。因为 IPv4 使用 32 位地址,相比 IPv6 的 128 位来说,计算更快,便于用于局域网通信。
第二个参数type是Socket类型,常用的Socket类型我们之前已经介绍过了分别是SOCK_STREAM和SOCK_DGRAM因为我们要写的是TCP Socket编程所以我们使用SOCK_STREAM。
第三个参数protocol表示传输协议一般取为0。因为一般情况下有了 domain和 type 两个参数就可以创建套接字了,操作系统会自动推演出协议类型,除非遇到这样的情况:有两种不同的协议支持同一种地址类型和数据传输类型。如果我们不指明使用哪种协议,操作系统是没办法自动推演的。
调用socket函数整体代码的实现:
int sockfd=socket(AF_INET,SOCK_STREAM,0);//建立套接字
显而易见的,那么UDP的写法则为:
sockfd=socket(AF_INET, SOCK_DGRAM,0);
本文固定URL:https://www.dotcpp.com/course/774
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程