搭建tcp客户端,双进程实现tcp服务端客户端随时收发,udp服务端客户端

2023-11-08

tcp客户端

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include <unistd.h>

#define ERR_MSG(msg) do{\
printf("line = %d\n", __LINE__);\
perror(msg); \
}while(0)

#define IP "192.168.0.144"   //宏定义服务端私网
#define POINT 8888           //宏定义服务端端口

char buf[32] = "";
int main(int argc, char const *argv[])
{
    //创建流式套接字
    int sockfd = socket(AF_INET,SOCK_STREAM,0);
    if(-1 == sockfd){                  //如果创建失败
        ERR_MSG("socket");             //输出错误
        return -1;
    }
    printf("Client created socket success\n");   //创建套接字成功输出提示
    //绑定客户端的IP和端口号
    
    
    //连接服务器
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;              //必须填AF_INET
    addr.sin_port = htons(POINT);           //服务器绑定的端口号
    addr.sin_addr.s_addr = inet_addr(IP);   //服务器绑定的IP
    socklen_t addrlen = sizeof(addr);

    if(connect(sockfd,(struct sockaddr*)&addr,sizeof(addr)) < 0){
        ERR_MSG("send");             //输出错误
        return -1;
    }
    printf("connect server success\n");

    //发送数据给服务器
    while (1)  //循环接收、打印服务端发来的消息和发送客户端消息
        {
            
            //发送信息给服务端
            bzero(buf,sizeof(buf));   //清空字符串
            printf("请输入发送给服务端的信息:");
            fgets(buf,sizeof(buf),stdin);
            buf[strlen(buf)-1] = 0;
            
            ssize_t resend = send(sockfd,buf,sizeof(buf),0);  //发送buf中的信息给服务端
            if(-1 == resend){                  //如果发送失败
                ERR_MSG("send");             //输出错误
                return -1;
            }
            printf("client send success\n");   //发送成功输出提示

            bzero(buf,sizeof(buf));    //清空字符串,接收服务端发来的消息
            ssize_t crecv = recv(sockfd,buf,sizeof(buf),0);
            if(-1 == crecv){                  
                ERR_MSG("recv");              //接收失败输出错误
                return -1;
            }else if(0 == crecv){
                printf("服务端关闭\n");
                break;
            }
            printf("Client recv [%s: %d]: %s success\n",inet_ntoa(addr.sin_addr),ntohs(addr.sin_port),buf);
            //打印服务端ip、端口号和发来的消息

            
        }
        close(sockfd);   //客户端退出的话,关闭为这个客户端收发消息生成的文件描述符
    //关闭文件描述符
    return 0;
}

双进程tcp服务端

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include <unistd.h>

#define ERR_MSG(msg) do{\
printf("line = %d\n", __LINE__);\
perror(msg); \
}while(0)

#define IP "192.168.0.144"   //宏定义服务端私网
#define POINT 8888           //宏定义服务端端口

int main(int argc, char const *argv[])
{
    //创建套接字
    int sockfd = socket(AF_INET,SOCK_STREAM,0);
    if(-1 == sockfd){                  //如果创建失败
        ERR_MSG("socket");             //输出错误
        return -1;
    }
    printf("Server created socket success\n");   //创建套接字成功输出提示
    
    //允许端口快速被复用
    int reuse = 1;
    if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0){
        ERR_MSG("setsockopt");
        return -1;
    }

    //绑定服务器的ip和端口
    //结构体初始化
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(POINT);
    addr.sin_addr.s_addr = inet_addr(IP);
    socklen_t addrlen = sizeof(addr);

    int rb = bind(sockfd,(struct sockaddr*)&addr,addrlen);
    if(-1 == rb){                  //如果绑定失败
        ERR_MSG("bind");              //输出错误
        return -1;
    }
    printf("bind server success\n");  //套接字与服务端ip和端口绑定成功输出提示

    //将套接字设置为被动监听状态
    if(-1 == listen(sockfd,6)){
        ERR_MSG("listen");              //监听失败输出错误
        return -1;
    }
    printf("listing...\n");         //套接字设置成监听状态成功后提示

    

    //接收客户端的信息
    char buf[32] = "";      //接收客户端发来消息存储的字符串
    while (1)
    {
        //获取连接成功后的套接字
        struct sockaddr_in actaddr;      //定义接收客户端ip和端口号的结构体
        socklen_t actaddrlen = sizeof(actaddr);
        int actsockfd = accept(sockfd,(struct sockaddr*)&actaddr,&actaddrlen);
        if(-1 == actsockfd){                  //如果连接失败
            ERR_MSG("accept");             //输出错误
            return -1;
        }
        printf("%d server accept success [%s:%d]\n",actsockfd,inet_ntoa(actaddr.sin_addr),ntohs(actaddr.sin_port));
        //打印新生成的文件描述符,该文件描述符用来通信  打印客户端ip和端口
        pid_t pid = fork();
        if(0 == pid){
            while(1){
                bzero(buf,sizeof(buf));    //情况字符串,接收客户端发来的消息
            ssize_t srecv = recv(actsockfd,buf,sizeof(buf),0);
            if(-1 == srecv){                  
                ERR_MSG("recv");              //接收失败输出错误
                return -1;
            }else if(0 == srecv){
                printf("客户端关闭\n");
                break;
            }
            printf("Server recv [%s: %d]: %s success\n",inet_ntoa(actaddr.sin_addr),ntohs(actaddr.sin_port),buf);
            //打印客户端ip、端口号和发来的消息
            }
        }else if(pid > 0){
            while(1){
            //发送信息给客户端
            bzero(buf,sizeof(buf));   //清空字符串
            //strcpy(buf,"Ser reply");  //输入要发给客户端的信息
            printf("请输入发给客户端的信息:");
            fgets(buf,sizeof(buf),stdin);
            buf[strlen(buf)-1] = 0;
            ssize_t resend = send(actsockfd,buf,sizeof(buf),0);  //发送buf中的信息给客户端
            if(-1 == resend){                  //如果发送失败
                ERR_MSG("send");             //输出错误
                return -1;
            }
            printf("Server send success\n");   //发送成功输出提示
            }
        }else if(pid < 0){
            ERR_MSG("fork");
            return -1;
        }

    
    //关闭套接字
    close(sockfd);
    printf("Server exit\n");
    return 0;
}
}

双进程tcp客户端

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include <unistd.h>

#define ERR_MSG(msg) do{\
printf("line = %d\n", __LINE__);\
perror(msg); \
}while(0)

#define IP "192.168.0.144"   //宏定义服务端私网
#define POINT 8888           //宏定义服务端端口

char buf[32] = "";
int main(int argc, char const *argv[])
{
    //创建流式套接字
    int sockfd = socket(AF_INET,SOCK_STREAM,0);
    if(-1 == sockfd){                  //如果创建失败
        ERR_MSG("socket");             //输出错误
        return -1;
    }
    printf("Client created socket success\n");   //创建套接字成功输出提示
    //绑定客户端的IP和端口号
    // int rb = bind(sockfd,(struct sockaddr*)&addr,addrlen);
    // if(-1 == rb){                  //如果绑定失败
    //     ERR_MSG("bind");              //输出错误
    //     return -1;
    // }
    // printf("bind client success\n");  //套接字与客户端ip和端口绑定成功输出提示
    
    //连接服务器
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;              //必须填AF_INET
    addr.sin_port = htons(POINT);           //服务器绑定的端口号
    addr.sin_addr.s_addr = inet_addr(IP);   //服务器绑定的IP
    socklen_t addrlen = sizeof(addr);

    if(connect(sockfd,(struct sockaddr*)&addr,sizeof(addr)) < 0){
        ERR_MSG("connect");             //输出错误
        return -1;
    }
    printf("connect server success\n");


    pid_t pid = fork();
    if(pid > 0){
        while (1)
        {
            //发送信息给服务端
            bzero(buf,sizeof(buf));   //清空字符串
            printf("请输入发送给服务端的信息:");
            fgets(buf,sizeof(buf),stdin);
            buf[strlen(buf)-1] = 0;
            
            ssize_t resend = send(sockfd,buf,sizeof(buf),0);  //发送buf中的信息给服务端
            if(-1 == resend){                  //如果发送失败
                ERR_MSG("send");             //输出错误
                return -1;
            }
            printf("client send success\n");   //发送成功输出提示
        }
    }else if(0 == pid){
            while (1)
            {
                bzero(buf,sizeof(buf));    //清空字符串,接收服务端发来的消息
            ssize_t crecv = recv(sockfd,buf,sizeof(buf),0);
            if(-1 == crecv){                  
                ERR_MSG("recv");              //接收失败输出错误
                return -1;
            }else if(0 == crecv){
                printf("服务端关闭\n");
                break;
            }
            printf("Client recv [%s: %d]: %s success\n",inet_ntoa(addr.sin_addr),ntohs(addr.sin_port),buf);
            //打印服务端ip、端口号和发来的消息
            }
            
        }else if(0 > pid){
            ERR_MSG("fork");
            return -1;
        }
        
    
    
        close(sockfd);   //服务端退出的话,关闭为这个客户端收发消息生成的文件描述符
    //接收服务器返回值
    //关闭文件描述符
    return 0;
}

双进程tcp通信效果展示

 udp服务端

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include <unistd.h>

#define ERR_MSG(msg) do{\
printf("line = %d\n", __LINE__);\
perror(msg); \
}while(0)

#define IP "192.168.0.144"   //宏定义服务端私网
#define POINT 8888           //宏定义服务端端口

int main(int argc, char const *argv[])
{
    //创建报式套接字
    int sockfd = socket(AF_INET,SOCK_DGRAM,0);
    if(-1 == sockfd){                  //如果创建失败
        ERR_MSG("socket");             //输出错误
        return -1;
    }
    printf("Server created socket success\n");   //创建套接字成功输出提示
    
    

    //绑定服务器的ip和端口
    //结构体初始化
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(POINT);
    addr.sin_addr.s_addr = inet_addr(IP);
    socklen_t addrlen = sizeof(addr);

    int rb = bind(sockfd,(struct sockaddr*)&addr,addrlen);
    if(-1 == rb){                  //如果绑定失败
        ERR_MSG("bind");              //输出错误
        return -1;
    }
    printf("bind server success\n");  //套接字与服务端ip和端口绑定成功输出提示

   
    //接收客户端的信息
    char buf[32] = "";      //接收客户端发来消息存储的字符串
    ssize_t res = 0;

    struct sockaddr_in actaddr;      //定义接收客户端ip和端口号的结构体
    socklen_t actaddrlen = sizeof(actaddr);
    
    while (1)
    {
        
            bzero(buf,sizeof(buf));    //情况字符串,接收客户端发来的消息
            ssize_t srecv = recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&actaddr,&addrlen);
            if(-1 == srecv){                  
                ERR_MSG("recv");              //接收失败输出错误
                return -1;
            }else if(0 == srecv){
                printf("客户端关闭\n");
                break;
            }
            printf("Server recv [%s: %d]: %s success\n",inet_ntoa(actaddr.sin_addr),ntohs(actaddr.sin_port),buf);
            //打印客户端ip、端口号和发来的消息

            //发送信息给客户端
            bzero(buf,sizeof(buf));   //清空字符串
            strcpy(buf,"Ser reply");  //输入要发给客户端的信息
            ssize_t resend = sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&actaddr,addrlen);  //发送buf中的信息给客户端
            if(-1 == resend){                  //如果发送失败
                ERR_MSG("send");             //输出错误
                return -1;
            }
            printf("Server sendto success\n");   //发送成功输出提示
        
    }

    //关闭套接字
    close(sockfd);
    printf("Server exit\n");
    return 0;
}

udp客户端

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include <unistd.h>

#define ERR_MSG(msg) do{\
printf("line = %d\n", __LINE__);\
perror(msg); \
}while(0)

#define IP "192.168.0.144"   //宏定义服务端私网
#define POINT 8888           //宏定义服务端端口

int main(int argc, char const *argv[])
{
    //创建报式套接字
    int sockfd = socket(AF_INET,SOCK_DGRAM,0);
    if(-1 == sockfd){                  //如果创建失败
        ERR_MSG("socket");             //输出错误
        return -1;
    }
    printf("Server created socket success\n");   //创建套接字成功输出提示

    //绑定服务器的ip和端口
    //结构体初始化
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(POINT);
    addr.sin_addr.s_addr = inet_addr(IP);
    socklen_t addrlen = sizeof(addr);

    
    //接收客户端的信息
    char buf[32] = "";      //接收客户端发来消息存储的字符串
    
    while (1)
    {
        //发送信息给服务端
            bzero(buf,sizeof(buf));   //清空字符串
            printf("请输入发送给服务端的信息:");
            fgets(buf,sizeof(buf),stdin);
            buf[strlen(buf)-1] = 0; //将从终端收到的消息\n改为\0
            ssize_t resend = sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&addr,addrlen);  //发送buf中的信息给服务端
            if(-1 == resend){                  //如果发送失败
                ERR_MSG("send");             //输出错误
                return -1;
            }
            printf("Client sendto success\n");   //发送成功输出提示

        
            bzero(buf,sizeof(buf));    //清空字符串,接收客户端发来的消息
            ssize_t crecv = recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&addr,&addrlen);
            if(-1 == crecv){                  
                ERR_MSG("recvfrom");              //接收失败输出错误
                return -1;
            }else if(0 == crecv){
                printf("服务端关闭\n");
                break;
            }
            printf("Client recv [%s: %d]: %s success\n",inet_ntoa(addr.sin_addr),ntohs(addr.sin_port),buf);
            //打印服务端ip、端口号和发来的消息

    }

    //关闭套接字
    close(sockfd);
    printf("Client exit\n");
    return 0;
}

udp通信效果展示

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

搭建tcp客户端,双进程实现tcp服务端客户端随时收发,udp服务端客户端 的相关文章

  • 一个网工(网络工程师)七年的职业血泪史....

    前言 一个工作了七年的老网工 上家公司待了五年 现在这家公司也快三年了 分享一些我自己学习网络安全路上的一些经历 也算是帮大家少走些弯路 一 如何学习网络安全 1 不要试图以编程为基础去学习网络安全 不要以编程为基础再开始学习网络安全 一般
  • 虚拟主机操作系统 Windows、Linux

    操作系统将直接影响服务器的性能 安全性和可用性 因此确保选择合适的操作系统对于成功运行您的网站或应用程序至关重要 以下是一些考虑因素 可帮助您选择适合您需求的虚拟主机操作系统 1 熟悉度和技术支持 如何选择操作系统应该考虑您的经验水平和熟悉
  • 服务器超线程的好处

    服务器超线程的好处 1 提高性能 超线程通过提高整体系统吞吐量显着提高服务器性能 通过允许多个线程在单个物理内核上同时执行 超线程减少了空闲时间并最大限度地利用了可用资源 这会加快任务执行速度并缩短应用程序的响应时间 尤其是在多线程工作负载
  • 成为一个黑客,就按照这个路线来!

    前几天一个同学在聊天中提到毕业后想要从事网络安全方向的工作 虽然他本身也是学计算机的 但是又怕心有余而力不足 因为 从事网络安全方面的工作向来起点都比较高 大学里少有开设这类课程的 在学校能够学到的知识比较有限 网上的关于这方面课程的质量又
  • 网络空间安全女生就业,怎么学?

    我实验室的学长们基本都是以红队和复现为主 如果学校好点可能还有更多的选择 如果想在这个方向深入下去 推荐流程是先打两年CTF 把大概的技术方向摸一摸 大一的话 如果学校还不错 那就优先建议打好基础 包括C语言 Python一类 建议把CTF
  • 这些专利知识你知道吗?

    专利作为一种重要的知识产权保护形式 专利不仅成为了企业核心竞争力的重要组成部分 也成为了国家创新发展的重要支撑 专利是指国家专利主管机关授予发明创造申请人的一种专有权 这种专有权具有独占性 排他性和法律强制性 能够为持有者带来经济利益和竞争
  • 如何解读服务器的配置和架构?

    在当今数字化时代 服务器作为企业或组织的重要基础设施 其配置和架构对于保障业务的稳定运行至关重要 如何解读服务器的配置和架构 成为了一个备受关注的话题 本文将围绕服务器配置和架构的解读进行深入探讨 帮助读者更好地理解服务器的性能 扩展性和安
  • centos系统有什么好处?

    CentOS是一种基于开源代码的Linux操作系统 它有以下几个优势 1 稳定性 CentOS是一种非常稳定的操作系统 它的代码经过了严格的测试和审查 因此它非常适合作为服务器操作系统使 用 2 安全性 由于CentOS是基于开源代码的操作
  • 线程安全(中)--彻底搞懂synchronized(从偏向锁到重量级锁)

    接触过线程安全的同学想必都使用过synchronized这个关键字 在java同步代码快中 synchronized的使用方式无非有两个 通过对一个对象进行加锁来实现同步 如下面代码 synchronized lockObject 代码 对
  • Jmeter 性能-并发量计算

    并发概念 指网站在同一时间访问的人数 人数越大瞬间带宽要求更高 服务器并发量分为 业务并发用户数 最大并发访问数 系统用户数 同时在线用户数 估算业务并发量的公式 C nL T C C 3 C的平方根 说明 C是平均的业务并发用户数 n是l
  • 揭秘网络世界的幕后密码——Wireshark网络协议分析软件

    在我们日常生活中 计算机和互联网已经成为不可或缺的一部分 然而 很少有人真正了解网络背后复杂的工作原理和通信协议 幸运的是 有一款强大而实用的软件 Wireshark 可以帮助我们深入了解网络世界的幕后密码 Wireshark是一款免费的网
  • 网络安全基础知识面试题库

    1 基于路由器的攻击手段 1 1 源IP地址欺骗式攻击 入侵者从外部传输一个伪装成来自内部主机的数据包 数据包的IP是 内网的合法IP 对策 丢弃所有来自路由器外端口 却使用内部源地址的数据包 1 2 源路由攻击 入侵者让数据包循着一个不可
  • 一台java服务器可以跑多少个线程?

    一台java服务器可以跑多少个线程 一台java服务器能跑多少个线程 这个问题来自一次线上报警如下图 超过了我们的配置阈值 打出jstack文件 通过IBM Thread and Monitor Dump Analyzer for Java
  • tcpdump抓包

    tcpdump抓包 基本概念 1 类型的关键字 host 指明一台主机 如 host 10 1 110 110 net 指明一个网络地址 如 net 10 1 0 0 port 指明端口号 如 port 8090 2 确定方向的关键字 sr
  • Vue 如何使用WebSocket与服务器建立链接 持续保持通信

    WebSocket 浏览器通过JavaScript向服务器发出建立WebSocket链接的请求 链接建立后 客户端和服务器端就可以通过TCP链接直接交互数据 WebSocket链接后可以通过 send 方法来向服务器发送数据 并通过 onn
  • 内网安全:隧道技术详解

    目录 隧道技术 反向连接技术 反向连接实验所用网络拓扑图及说明 网络说明 防火墙限制说明 实验前提说明 实战一 CS反向连接上线 拿下Win2008 一 使用转发代理上线创建监听器 二 上传后门执行上线 隧道技术 SMB协议 SMB协议介绍
  • 【无标题】

    大家都知道该赛项的规程和样题向来都是模棱两可 从来不说具体的内容 导致选手在备赛时没有头绪 不知道该怎么训练 到了赛时发现题目和备赛的时候完全不一样 那么本文将以往年信息安全管理与评估赛项经验来解读今年2023年国赛的规程 帮助选手们指明方
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573
  • ESP10B 锁定连接器

    ESP10B 锁定连接器 ESP10B 电机新增内容包括双极型号标准 NEMA 尺寸 17 23 和 34 的步进电机现在包括输出扭矩范围从 61 盎司英寸到 1291 盎司英寸的双极型号 该电机配有带锁定连接器的尾缆 可轻松连接 每转可步
  • 网络安全行业热门认证证书合集

    网络安全认证证书 就和学历一样是敲门砖 拿到了可以用不到 但不能没有 技术大牛可以没有证书 但普通人不能没有 1 初级入门 就像学历在职场上展示一个人的基本素养一样 网络安全认证证书可以展示一个人在网络安全领域具备的基本知识和技能 它为初学

随机推荐

  • Mac M1系统 miniconda安装、配置conda环境,及在conda环境中安装激活QIIME2

    Mac M1系统 miniconda安装 配置conda环境 及在conda环境中安装激活QIIME2 1 适配版本的miniconda软件安装包下载 windows MAC LINUX Miniconda Conda documentat
  • JavaScript——将json数组填充进excel表并下载保存

    今天遇到的一个问题就是 获取到猫眼电影票房总榜的数据后 怎么把他们填充进excel中 本文参考了另一篇博客 地址如下 https blog csdn net qq 34623560 article details 79928248 本文对其
  • flowable(九) 通过ui部署流程图

    下载xml模型 登陆到flowable modeler后台 上传部署 登陆flowable admin地址 ok
  • React基础(肆)———状态和循环渲染

    一 状态 什么是状态 import React Component from react export default class App extends Component state mytext 收藏 myShow true rend
  • 问题 C: 括号匹配

    题目描述 给你一个字符串 里面只包含 四种符号 请问你需要至少添加多少个括号才能使这些括号匹配起来 如 是匹配的 是匹配的 是不匹配的 是不匹配的 输入 第一行输入一个正整数N 表示测试数据组数 N lt 10 每组测试数据都只有一行 是一
  • 调试最长的一帧(第14天)

    看看流程 可见分页数据库的更新也是和场景的筛选绘制是同时进行的 再看看大图 第14天要进行左下角的 依照惯例 跟过去 现在开始步入正轨 发现第0个fileName为空 这是有问题的 创建pagelod时修正为 这次进来了 在这里删除 放入r
  • HTML5+CSS3D酷炫相册

    HTML5 CSS3D酷炫相册 图片预览 目录结构 源码 HTML
  • 2:数据结构复习线性表(一般集合的并集:链式解决方案)

    线性表的合并 例2 1 求解一般集合的并集问题 问题描述 已知两个集合A和B 现要求一个新的集合A AUB 例如 设 A 7 5 3 11 B 2 6 3 合并后 A 7 5 3 11 2 6 问题分析 可以利用两个线性表LA和LB分别表示
  • 数组最大连续子序列和

    题目 给定一个数组 其中元素可正可负 求其中最大连续子序列的和 这题是一道非常经典的面试题 会经常出现在各种面试中 具体有好几种不同时间复杂度的解法 那么最好的方法是用动态规划方法来求解 第一种 时间复杂度为O n 3 暴力法求解 三层循环
  • events.js:183 throw er; // Unhandled 'error' event 相关问题解决办法

    在启动项目的时候可能会出现以下问题 出现原因 出现这个问题的主要原因是因为端口被占用了 解决办法 查询端口号是否被占用 netstat aon findstr 8000 找到对应程序 tasklist findstr 9060 再任务管理器
  • 2015款Mac笔记本安装Windows10系统到外置移动硬盘教程

    终于把2015年的15寸Macbook Pro笔记本安装上了Windows10操作系统 并且是在外置的移动硬盘上安装的 运行的效果和用户体验也是非常棒 之前网上购买了加密的视频 但是这个视频必须是windows系统 还不能是虚拟机里面的系统
  • QT关键问题解决之paintevent理解

    基础概念 paintEvent QPaintEvent 函数是QWidget类中的虚函数 用于ui的绘制 会在多种情况下被其他函数自动调用 比如update 时 运行时机 一个重绘事件用来重绘一个部件的全部或者部分区域 下面几个原因的任意一
  • 中移动 NB-IoT (M5310-A)学习笔记

    一 来自 M5310 A硬件设计手册V1 5 DCE Data Communication EquipmentDTE Data Terminal Equipment 模块的三种工作模式 模式 描述 Active 模块处于活动状态 所有功能正
  • CreateFile之类的几个函数

    这几天看windows API一日一练 博主给画出了道道 我来填填具体点的内容 需求 想操作文件 串口 并口 USB等等 原理层 其实很简单 就三步 打开 操作 然后关闭 实践层1 打开用CreateFile 读写操作用WriteFile
  • 宝塔面板部署nginx+springboot+netty

    nginx配置集成netty的springboot前后端分离项目 项目环境 CentOS 7 9 宝塔面板 nginx1 21 前后端分离项目按照日常部署方式部署到服务器 前往nginx配置文件nginx conf 配置TCP socket
  • 两台机器之间同步时间,并修改服务器层级

    作业a 第一台机器从阿里云同步时间 第二台机器从第一台机器同步时间 第一台机器配置 vim etc chrony conf 修改第一台机器的配置文件 将原有的pool注释掉 并添加阿里云时钟源 gt server ntp aliyun co
  • C++实现两个字符串交替组合成一个字符串

    引言 这道题来自力扣 给出两个字符串 将两个字符串交替着组合成一个字符串 如 string str1 abcd string str2 hb string str ahbbcd string str1 abcd string str2 hb
  • kafka高性能设计:内存池

    前言 Kafka的内存池是一个用于管理内存分配的缓存区域 它通过在内存上保留一块固定大小的内存池 用于分配消息缓存 批处理缓存等对象 以减少频繁调用内存分配函数的开销 Kafka内存池的实现利用了Java NIO中的 ByteBuffer
  • 罗技键盘连计算机,罗技键盘怎么连接电脑

    罗技蓝牙键盘连接电脑需装入电池 打开电源开关 转动拨盘至 1 位置 然后长按 PC 键3秒进入 搜索 模式 打开电脑 前往 设置 设备 蓝牙和其他设备 打开 蓝牙 在蓝牙搜索列表中选中罗技蓝牙键盘的名称 确认配对即可完成连接 本文以惠普光影
  • 搭建tcp客户端,双进程实现tcp服务端客户端随时收发,udp服务端客户端

    tcp客户端 include