学习总结
1、什么是套接字?
套接字(socket)是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。
应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)的接口,区分不同应用程序进程间的网络通信和连接。
生成套接字,主要有3个参数:通信的目的IP地址、使用的传输 层协议(TCP或UDP)和使用的端口号。Socket原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输 层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
socket相当于用电话机与他人通话,首先要做的就是安装电话机。
而安装电话机需要用到以下步骤来完成:
第一步 安装电话机 创建socket
//代码示例:
//创建socket需要调用 Winsock2.h 头文件
SOCKET sockCli = socket
(
//第一个参数代表地址族规范
AF_INET,//表示IPv4地址族
//第二个参数代表socket的类型
SOCK_STREAM,// 面向连接 TCP协议 一般用于 IPv4 IPv6 地址族
//第三个参数 要使用的协议
0 //为0 表示调用者不希望指定协议,服务提供商将选择要使用的协议
);
第二步 安装完电话机接下来要干什么?
当然是分配电话号码
//SOCKADDR_IN 指定AF_INET地址族的传输地址和端口
SOCKADDR_IN addrSrv;
//设置指定IPv4传输地址
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//htonl 地址转化 INADDR_ANY 任何地址
//传输地址的地址族
addrSrv.sin_family = AF_INET;
//传输协议端口号
//当服务端与客户段端口号不同是将无法连接成功
addrSrv.sin_port = htons(6000);
//分配电话号码
bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR) );
第三步 监听
//监听传入连接状态的电话机
listen(sockSrv, 5)//最大的监听数目 ,执行到listen,但尚未执行到accept
第四步 分配一台分机去处理客户端的端连接
SOCKADDR_IN addrCli;
int len =