Dotcpp  >  编程教程  >  TCP协议服务端及代码实现  >  Socket编程之socket函数

Socket编程之socket函数

点击打开在线编译器,边学边练

如下图所示,是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);



本文固定URL:https://www.dotcpp.com/course/774

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