套接字以及相关函数

server/2024/9/22 18:08:35/

socket函数

linux下的socket函数:

#include<sys/socket.h>
int   socket(int  domain,  int  type,  int  protocol);

参数:    
            domain     套接字中使用的协议族信息
            type          套接字数据传输类型信息
            protocol   计算机间通信中使用的协议信息

返回值:  

            成功:返回文件描述符
            失败:返回 -1 

windows下的socket函数:

#include<winsock2.h>
SOCKET    socket(int  af,  int  type,  int  protocol);

参数:    
            domain     套接字中使用的协议族信息
            type          套接字数据传输类型信息
            protocol   计算机间通信中使用的协议信息

返回值:
             成功:返回socket句柄
             失败:返回  INVALID_SOCKET
 

参数一 (domain): 

协议族(Protocol Family) 
             PF_INET           IPV4互联网协议族
             PF_INET6         IPV6互联网协议族
             PF_LOCAL       本地通信的UNIX协议族
             PF_PACKET     底层套接字的协议族
             PF_IPX            IPX  Novell协议族

参数二(type)

            SOCK_STREAM     面向连接套接字
            SOCK_DGRAM      面向消息套接字

参数三(protocol)

         IPPROTO_TCP
         IPPROTO_UDP

地址信息表示(sockaddr_in结构体)

struct   sockaddr_in
{
      sa_family_t        sin_family;     //地址族
      uint16_t            sin_port;        //16位TCP/UDP端口号
      struct  in_addr  sin_addr;       //32位IP地址
      char   sin_zero[8];   //不使用
}

struct   in_addr
{
     in_addr_t    s_addr;   //32位IPV4地址
}

此sockaddr_in结构体用于bind函数中,
bind(SOCKET   s,   const   struct   sockaddr*  name,   int   namelen);
成功返回 0  失败返回  SOCKET_ERROR

举例:
 //1,创建监听套接字
    hServSock = socket(PF_INET, SOCK_STREAM, 0);
    if (hServSock == INVALID_SOCKET)
    {
        cout << "申请发送套接字失败" << endl;
    }

    //2 ,绑定本地IP接口
    SOCKADDR_IN  servAdr;
    memset(&servAdr, 0, sizeof(servAdr));
    servAdr.sin_family = AF_INET;      //地址族
    servAdr.sin_port = htons(9999);    //端口,主机转网络字节序
    servAdr.sin_addr.s_addr = htonl(INADDR_ANY);  //绑定本地IP

    if (bind(hServSock, (SOCKADDR*)&servAdr, sizeof(servAdr)) == SOCKET_ERROR)
    {
        cout << "bind error" << endl;
    }

字节序转换

unsigned  short  htons(unsigned  short)
unsigned  short  ntohs(unsigned  short)
unsigned  long   htonl(unsigned   long)
unsigned  long   ntohl(unsigned   long)

h代表主机字节序
n代表网络字节序
s代表short
l代表long

将字符串转换成点分十进制32位整数型数据
wchar_t  adr[] = L"192.168.19.1";
InetPton(AF_INET, adr, &servAdr.sin_addr); // 服务器IP地址  


http://www.ppmy.cn/server/23884.html

相关文章

算法人生(13):从“Scrum”看“PDCA时间管理法”

很多人会好奇为什么“读了很多书&#xff0c;却依然不知道怎么过好这一生”&#xff1f;大家可能都有各自的理解&#xff0c;但正如王阳明先生的“知行合一”所说&#xff0c;“知”要能“行”出来才算“真知”&#xff0c;生活中很多时候知并不一定能行&#xff0c;所以知与行…

YOLOv8+PyQt5输电线路缺陷检测(目前最全面的类别检测,可以从图像、视频和摄像头三种路径检测)

1.效果视频&#xff1a;YOLOv8PyQt5输电线路缺陷检测&#xff08;目前最全面的类别检测&#xff0c;可以从图像、视频和摄像头三种路径检测&#xff09;_哔哩哔哩_bilibili 资源包含可视化的输电线路缺陷检测系统&#xff0c;可识别图片和视频当中出现的五类常见的输电线路缺陷…

Phi-3-mini-4k-instruct 的功能测试

Model card 介绍 Phi-3-Mini-4K-Instruct 是一个 3.8B 参数、轻量级、最先进的开放模型&#xff0c;使用 Phi-3 数据集进行训练&#xff0c;其中包括合成数据和经过过滤的公开可用网站数据&#xff0c;重点是 高品质和推理密集的属性。 该型号属于 Phi-3 系列&#xff0c;Mini…

Dockerfile 构建上下文 build -f 选项 加快构建速度

理解构建上下文&#xff08;Build Context&#xff09; 当运行 docker build 命令时&#xff0c;当前工作目录被称为构建上下文&#xff0c;docker本身会将工作目录里面所有的文件都上传给docker daemon&#xff0c;在这个基础之上再去构建容器镜像。&#xff08;如果你在根目…

鸿蒙应用ArkTS开发- 选择图片、文件和拍照功能实现

前言 在使用App的时候&#xff0c;我们经常会在一些社交软件中聊天时发一些图片或者文件之类的多媒体文件&#xff0c;那在鸿蒙原生应用中&#xff0c;我们怎么开发这样的功能呢&#xff1f; 本文会给大家对这个功能点进行讲解&#xff0c;我们采用的是拉起系统组件来进行图片…

system-auth与password-auth的区别

/etc/pam.d/system-auth和/etc/pam.d/password-auth是两个不同的PAM配置文件&#xff0c;它们在系统上的作用和功能略有不同。 /etc/pam.d/system-auth配置文件是系统的全局认证配置文件&#xff0c;通常包含系统范围内适用的认证规则和策略。这个文件会被其他PAM配置文件引用&…

前端项目学习记录1:svg图标的封装与使用

1.下载svg依赖 pnpm i vite-plugin-svg-icons -D 还有一个&#xff0c;下面的不安装可能会报错 pnpm i fast-glob -D 2.vite.config.ts配置 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from "path"; //引入svg需要用到的…

K8s: 部署 kubernetes dashboard

部署 Dashboard K8s 官方有一个项目叫 dashboard&#xff0c;通过这个项目更方便监控集群的状态 官方地址: https://github.com/kubernetes/dashboard 通常我们通过命令行 $ kubectl get po -n kube-system 能够查看到集群所有的组件&#xff0c;但这样的方式比较不太直观 …