返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++的socket封装方法是什么
  • 116
分享到

C++的socket封装方法是什么

2023-06-04 10:06:05 116人浏览 独家记忆
摘要

本篇内容介绍了“c++的Socket封装方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!配置Qt下的pro文件TEMPLATE =

本篇内容介绍了“c++Socket封装方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

配置Qt下的pro文件

  • TEMPLATE = app

  • CONFIG += console

  • CONFIG -= app_bundle

  • CONFIG -= qt

  •  

  • LIBS += -lWs2_32 ##标示使用window下的Ws2_32.lib,-l表示要链接后面的库

  • #-lWs2_32,link Ws2_32.lib

  •  

  • SOURCES += main.cpp \

  •     udp.cpp

  • include(deployment.pri)

  • qtcADDDeployment()

  •  

  • HEADERS += \

  •     udp.h

编写udp.h文件

  • #ifndef UDP_H

  • #define UDP_H

  • #ifdef MYlinux

  • #include <unistd.h>

  • #include <arpa/inet.h>

  • #include <sys/types.h>

  • #include <sys/socket.h>

  • #define SOCKET int

  • #else

  • #include <winsock2.h>

  • #endif

  • class myudp

  • {

  • private:

  •     SOCKET st;//类的内部成员一般是不暴露在外面的

  • public:

  •     myudp();

  •     ~myudp();

  • int socket_send(const char * IP,const char *buf, int len);

  • int socket_recv(char *buf, int len, char * srcIP);

  • int socket_bind(short int port);

  • };

  • #endif // UDP_H

编写udp.cpp

  • #include <string.h>

  • #include <stdio.h>

  • #include "udp.h"

  • //#define MYLINUX ---- linux 下 makefile文件定义 -DMYLINUX

  • int myudp::socket_send(const char * IP,const char *buf, int len)

  • {

  •     st = socket(AF_INET, SOCK_DGRAM, 0);

  •     //建立一个socket,第一个参数是指定socket要用哪个协议,AF_INET代表要用tcp/IP协议

  •     //第二个参数SOCK_DGRAM意思是要用UDP协议

  •     //第三个参数一般默认填0

  •     struct sockaddr_in addr;

  •     memset(&addr, 0, sizeof(addr));//初始化结构addr

  •     addr.sin_family = AF_INET;//代表要使用一个TCP/IP的地址

  •     addr.sin_port = htons(8080);//host to net short

  •     addr.sin_addr.s_addr = inet_addr(IP);

  •     //IP地址解析

  •     //unsigned long laddr = inet_addr("192.168.6.200");

  •     //unsigned char *p = &laddr;

  •     //printf("%u, %u, %u, %u\n", *(p), *(p+1), *(p+2), *(p+3));

  •     size_t rc = 0;

  •     //发送udp数据

  •     rc = sendto(st,buf,len,0,(struct sockaddr *)&addr,sizeof(addr));

  •     return rc;

  • }

  • int myudp::socket_recv(char *buf, int len, char * srcIP)

  • {

  •     struct sockaddr_in sendaddr;//来自发送方的IP地址

  •     memset(&sendaddr,0,sizeof(sendaddr));

  • #ifdef MYLINUX

  •     socklen_t len;

  • #else

  •     int addrlen;

  • #endif

  •     addrlen = sizeof(sendaddr);

  •     memset(buf,0,len);

  •     size_t rc = recvfrom(st,buf,len,0,(struct sockaddr *)&sendaddr,&addrlen);

  •     //inet_ntoa(sendaddr.sin_addr);//这个函数是不可重入函数

  •     //多线程调用,这个函数会出问题

  •     if(srcIP)

  •         strcpy(srcIP,inet_ntoa(sendaddr.sin_addr));

  •     //printf("%s:\n%s\n", srcIP, buf);

  • return rc;

  • }

  • myudp::myudp()

  • {

  • #ifndef MYLINUX

  •     //初始化socket

  •     DWord ver;

  •     WSADATA wsaData;

  •     ver = MAKEWORD(1,1);//在调用WASStartup要告诉windows,我用什么版本的socket

  •     WSAStartup(ver, &wsaData);//windows要求,只要用socket,第一步,必须调用这个函数

  •     //初始化完成

  • #endif

  •     st = socket(AF_INET,SOCK_DGRAM,0);//定义一个socket

  • }

  • myudp::~myudp()

  • {

  • #ifdef MYLINUX

  •     close(st);

  • #else

  •     closesocket(st);//关闭socket

  •     WSACleanup();//释放win socket内部的相关资源

  • #endif

  • }

  • int myudp::socket_bind(short port)

  • {

  •     struct sockaddr_in addr;

  •     memset(&addr,0,sizeof(addr));//初始化addr

  •     addr.sin_family = AF_INET;//代表要使用一个TCP/IP的地址

  •     addr.sin_port = htons(port);

  •     addr.sin_addr.s_addr = htonl(INADDR_ANY);//作为接收方,不需要指定具体的IP地址,接受的主机是什么IP,我就在什么IP接受数据

  •     //addr.sin_addr.s_addr = inet_addr("192.168.2.100");

  •     return bind(st, (struct sockaddr *)&addr, sizeof(addr)); //将端口号和程序绑定

  • }

main.c的实现代码

  • #include <iOStream>

  • #include "udp.h"

  • using namespace std;

  • int main(int arGC, char *args[])

  • {

  •     if(argc > 1)

  •     {

  •         myudp udp;

  •         char buf[1024] = {0};

  •         while(1)

  •         {

  •             memset(buf, 0, sizeof(buf));

  •             gets(buf);

  •             udp.socket_send(args[1],buf, strlen(buf));

  •             if (strcmp(buf, "exit") == 0)

  •                 break;

  •         }

  •     }else

  •     {

  •         myudp udp;

  •         char buf[1024] = {0};

  •         if(udp.socket_bind(8080) > -1)

  •         {

  •             char ip[100] = {0};

  •             while(1)

  •             {

  •                 memset(buf, 0, sizeof(buf));

  •                 memset(ip, 0, sizeof(ip));

  •                 udp.socket_recv(buf,sizeof(buf), ip);

  •                 if (strncmp(buf, "exit", 4) == 0)

  •                         break;

  •                 cout << ip << endl;

  •                 cout << buf << endl;

  •             }

  •         }

  •     }

  •     cout << "over" << endl;

  •     return 0;

  • }

“C++的socket封装方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: C++的socket封装方法是什么

本文链接: https://lsjlt.com/news/237389.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++的socket封装方法是什么
    本篇内容介绍了“C++的socket封装方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!配置QT下的pro文件TEMPLATE = ...
    99+
    2023-06-04
  • C++的封装方法是什么
    本篇内容介绍了“C++的封装方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!封装c++认为万事万物皆为对象,对象上有其属性和行为封装...
    99+
    2023-06-29
  • C#对mysql封装的方法是什么
    在C#中,可以使用MySQL Connector/NET来与MySQL数据库进行交互。MySQL Connector/NET是一个A...
    99+
    2023-10-24
    C# mysql
  • C++中怎么封装Socket库
    C++中怎么封装Socket库,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。代码如下: if((ErrorCode=WSAStartup(MAKEWORD...
    99+
    2023-06-17
  • mybatis封装jdbc的方法是什么
    MyBatis封装了JDBC的方法,通过映射SQL语句和Java方法,实现了数据操作的简化。MyBatis的主要封装方法包括: ...
    99+
    2024-03-07
    mybatis jdbc
  • C#封装的定义是什么
    这篇文章主要介绍了C#封装的定义是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#封装的定义是什么文章都会有所收获,下面我们一起来看看吧。C# 封装封装 被定义为"把一个或多...
    99+
    2023-06-17
  • C++ socket网络编程方法是什么
    本篇内容主要讲解“C++ socket网络编程方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++ socket网络编程方法是什么”吧!功能完成Cpp客户端简单功能,可收发数据。源码#...
    99+
    2023-06-25
  • java程序封装的方法是什么
    在Java中,封装是一种将数据和相关操作封装在一起的面向对象编程的概念。封装可以通过使用访问修饰符(如private、public、...
    99+
    2023-09-23
    java
  • python程序封装的方法是什么
    Python中的封装方法包括以下几种:1. 使用类:Python是一种面向对象的编程语言,可以使用类来封装数据和方法。通过定义类和类...
    99+
    2023-09-23
    python
  • springboot封装接口的方法是什么
    在Spring Boot中封装接口的方法有很多种,下面列举其中一种常用的方法:1. 创建一个接口类,定义接口的请求路径、请求方法和请...
    99+
    2023-10-21
    springboot
  • Sqlsugar基类封装的方法是什么
    Sqlsugar基类封装的方法包括以下几种: 查询数据方法:通过Select、GetList、GetPageList等方法来查询数...
    99+
    2024-04-09
    Sqlsugar
  • C++中封装的作用是什么
    在C++中,封装是一种面向对象编程的重要特性,它允许将数据和操作数据的函数封装在一个类中,从而实现数据的隐藏和保护。封装的作用主要有...
    99+
    2024-03-11
    C++
  • Java类对象封装的方法是什么
    Java类对象封装的方法是通过定义类、属性和方法来封装数据和行为。类是一种模板或蓝图,用于创建具有相似属性和行为的对象。属性是类的成...
    99+
    2023-10-23
    Java
  • vue封装axios请求的方法是什么
    本文小编为大家详细介绍“vue封装axios请求的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue封装axios请求的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。其实vue封装axio...
    99+
    2023-07-04
  • C#的Raw Socket是什么
    本篇内容主要讲解“C#的Raw Socket是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#的Raw Socket是什么”吧!谈起C# Raw Socket编程,大家也许会想起QQ和IE...
    99+
    2023-06-17
  • java如何实现socket连接方法封装
    目录Java实现socket连接技巧Java Socket的封装1 客户端Socket API要点2 服务端Socket API要点常见问题Java使用socket实现一个多线程we...
    99+
    2024-04-02
  • C#封装性指的是什么意思
    C#封装性(Encapsulation)指的是将数据和行为封装在一个类中,并限制外部访问类内部的数据,只允许通过类内部提供的方法来访...
    99+
    2024-03-06
    C#
  • 基python+selenium的二次封装方法是什么
    本篇内容主要讲解“基python+selenium的二次封装方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基python+selenium的二次封装方法是什么”吧!  首先在根目录下创...
    99+
    2023-06-02
  • elementUI el-table二次封装的方法是什么
    这篇文章主要讲解了“elementUI el-table二次封装的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“elementUI el-table二次封装的方...
    99+
    2023-07-05
  • ThinkPHP封装方法的概念和使用方法是什么
    今天小编给大家分享一下ThinkPHP封装方法的概念和使用方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是封装...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作