首页 > 其他分享 >socket

socket

时间:2023-05-09 11:12:51浏览次数:37  
标签:socket AF int ip unsigned 参数 sockfd

 

# 字节序转换函数、IP地址转换函数

/*
    网络字节序采用大端
    网络通信时,需要将主机字节序转换成网络字节序(大端),
    另外一个主机获取到数据后根据情况将网络字节序转换成主机字节序


    
        #include <arpa/inet.h>

        // 转换32位数据,一般用于转换ip
        uint32_t htonl(uint32_t hostlong);
        uint32_t ntohl(uint32_t netlong);

        // 转换16位数据,一般用于转换端口号
        uint16_t htons(uint16_t hostshort);
        uint16_t ntohs(uint16_t netshort);


    IP地址转换函数

        #include <arpa/inet.h>

        int inet_pton(int af, const char *src, void *dst);
            参数:
                af:地址族,AF_INET、AF_INET6
                src:点分十进制的ip地址
                dst:传出参数,转换后的结果
            
        const char *inet_ntop(int af, const void *src,
                                char *dst, socklen_t size);
            参数:
                af:地址族,AF_INET、AF_INET6
                src:ip地址的整数
                dst:传出参数,转换后的结果,字符串
                size:第三个参数的大小(数组的大小)
            返回值:
                返回转换后的结果,和dst一样,const不能修改

*/
#include <stdio.h>
#include <arpa/inet.h>

int main()
{
    // unsigned short a = 0x1234;
    // unsigned short c = htons(a);
    // printf("%x\n%x\n", a, c);

    // printf("=================================\n");
    // unsigned char buf[4] = {192, 168, 1, 1};
    // unsigned int num = *(unsigned int *)buf;
    // unsigned int sum = htonl(num);
    // unsigned char *p = (unsigned char *)&sum;
    // printf("%d %d %d %d\n", *p, *(p + 1), *(p + 2), *(p + 3));

    char string_ip[] = "192.168.1.1";
    unsigned int int_ip;
    inet_pton(AF_INET, string_ip, (void *)&int_ip);

    char buf[16];
    inet_ntop(AF_INET, (void *)& int_ip, buf, sizeof(buf));
    // printf("%d %d %d %d\n", *);
    printf("%s\n", buf);






    return 0;
}

 

# socket函数

 

/*
        #include <sys/types.h>
        #include <sys/socket.h>

        int socket(int domain, int type, int protocol);
            功能:创建一个套接字
            参数:
                domain:协议族
                    AF_UNIX, AF_LOCAL:本地(进程间通信)
                    AF_INET:ipv4
                    AF_INET6 :ipv6
                type:通信过程中使用的协议类型
                    SOCK_STREAM:流式协议
                    SOCK_DGRAM:报式协议
                protocol:具体的一个协议,一般写0
                    SOCK_STREAM:流式协议默认使用TCP
                    SOCK_DGRAM:报式协议默认使用UDP
            返回值:
                成功:文件描述符
                失败:-1
        int bind(int sockfd, const struct sockaddr *addr,
                    socklen_t addrlen);
            功能:绑定ip和端口号
            参数:
                sockfd:通过socket得到的文件描述符
                addr:需要绑定的socket地址,封装了IP和端口号的信息
                addrlen:第二个参数的大小
            返回值:
                成功:0
                失败:-1
        int listen(int sockfd, int backlog); 
            功能:监听这个sockfd上的连接
            参数:
                sockfd:socket的文件描述符
                backlog:max(半连接队列,全连接队列)
        int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
            功能:接收客户端连接,阻塞函数
            参数:
                sockfd:用于监听的文件描述符
                addr:传出参数,连接成功后客户端的地址信息
                addrlen:第二个参数对应的内存大小
            返回值:
                成功:用于通信的文件描述符
                失败:-1
        int connect(int sockfd, const struct sockaddr *addr,
                   socklen_t addrlen);
            功能:客户端连接服务器
            参数:
                sockfd:用于通信的文件描述符
                addr:客服端要连接服务器的地址信息
                addrlen:第二个参数的大小
            返回值:
                成功:0
                失败:-1
        
*/

 

标签:socket,AF,int,ip,unsigned,参数,sockfd
From: https://www.cnblogs.com/WTSRUVF/p/17384269.html

相关文章

  • websocket多实例推送解决方案-数据实时展示
    需求需要前端展示实时的订单数据信息。如下图所示,实时下单实时页面统计更新展示 思路方案前端使用websocket建立通信  后端监听数据库的binglog变更,实时得到最新数据,推送到前端 现状及问题客户端想实现实时获取数据的变更,使用了websocket+kafkaMq,当......
  • websocket.go
    packagemainimport("encoding/json""fmt""net/http""github.com/gorilla/websocket")varUP=websocket.Upgrader{ReadBufferSize:1024,WriteBufferSize:1024,CheckOrigin:func(r*http.Request)bool{returntr......
  • socket服务端
    Socket实现在接收到不同的消息时启动PeriodicCallback返回不同的数据,并且关闭时只关闭其中某一个定时器首先,你需要对MainHandler进行修改,添加一个字典callbacks,用于保存每个消息对应的回调函数和其它相关信息,例如:importtornado.ioloopimporttornado.webclassMainHand......
  • java netty socket实例:报文长度+报文内容,springboot
    前言说实话,javanetty方面的资料不算多,尤其是自定义报文格式的,少之又少自己写了个简单的收发:报文长度+报文内容发送的话,没有写自动组装格式,自己看需求吧,需要的话,自己完善服务端启动可以直接用类文件启动,也可以通过springboot。我这里写的是用springboot启动的,可以自己按照需求自......
  • MySQL连接失败解决方法can't connect to local MySQL server through socket '/tmp/my
    【报错信息】can'tconnecttolocalMySQLserverthroughsocket'/tmp/mysql.sock'(111)【问题描述】新服务器上安装MySQL后无法正常启动,提示连接失败。【问题分析】出现这个问题主要是mysql配置错误,找不到mysql.sock文件【解决方法】寻找mysql.sock文件的位置,比较常见......
  • C/C++网络编程笔记Socket
    https://www.bilibili.com/video/BV11Z4y157RY/?vd_source=d0030c72c95e04a14c5614c1c0e6159b上面链接是B站的博主教程,源代码来自上面视频,侵删,这里只是做笔记,以供复习和分享。上一篇博客我记录了配置环境并且跑通了,以及碰到的一些问题这篇文章是对socket的代码解读笔记。先把服务端......
  • 一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
    文章目录1Socket讲解2基于Socket的TCP编程3客户端Socket的工作过程包含以下四个基本的步骤3.1客户端创建Socket对象4服务器程序的工作过程包含以下四个基本的步骤:4.1服务器建立`ServerSocket`对象5案例实现客户端和服务端通信5.1代码实现5.2实现结果6更多案例分析6.1客......
  • Python asyncore socket客户端开发基本使用
    导读asyncore库是python的一个标准库,提供了以异步的方式写入套接字服务的客户端和服务器的基础结构,这篇文章主要介绍了Pythonasyncoresocket客户端开发基本使用,需要的朋友可以参考下介绍asyncore库是python的一个标准库,提供了以异步的方式写入套接字服务的客户端和服......
  • Jenkins 执行Docker build错误Got permission denied while trying to connect to the
    问题: 解决方法:这个报错为权限问题1.把jenkins用户,加到docker用户组 #如果没有docker用户组,先创建用户组:groupadddocker#添加jenkins用户到用户组:sudousermod-a-Gdockerjenkins-a<追加>必须与-G选项一起使用,把用户追加到某些组中。-G<群组>修改用户所属的......
  • C# WinForm使用Socket通信搭建简易聊天室
    1、创建WinForm应用程序 主入口两个按钮事件:///<summary>///打开客户端///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidbtn_OpenClient_Click(object......