如下图所示,是Socket通信的原理图,左侧为服务端,右侧是客户端,可以看到服务端的步骤要多一些,客户端将在后面讲解。本节开始将从左侧服务端第一步开始逐步讲解,本步骤目标为创建一个套接字,其返回值为后面的步骤使用。


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);


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)