自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (3)
  • 收藏
  • 关注

原创 简述socket编程中,udp协议服务器和客户端调用的API的过程。

简述socket编程中,udp协议服务器和客户端调用的API的过程。客服端:#include <stdio.h>#include <sys/socket.h>//socket#include <netinet/in.h>//struct sockaddr_in#include <string.h>//memset#include <arpa/inet.h>//htonsint main(int argc, char const *a

2021-09-29 15:16:29 473

原创 头文件中的#ifndef/define/endif的作用。

#ifndef __XX_H__#define __XX_H__//声明代码#endif作用:防止头文件重复包含如果没有包含这个头文件,那么就包含这个头文件,如果已经有了,那么就不要包含了#define

2021-09-29 15:05:40 1060

原创 编程错误2

日常错误之:frienderror: ‘std::ostream& Person::operator<<(std::ostream&, Person&)’ must take exactly one argument ostream& operator<<(ostream &out,Person &ob)^错误的翻译为:错误:'std::ostream& Person::operator<<(std::ostr

2021-09-10 19:36:48 637

原创 invalid operands of types‘const char [7]‘and ‘char [32]‘ to binary

在编程的时候,遇到了这个错误,我觉得我的程序没有错,反复把代码检查了几遍,甚至准备要要重载<<了我发现了一个弱智的问题,我的cout后面的标准输出流,少写了一个<.英语薄弱的我,看到operator的时候,下意识就要准备重载运算符了。。。,后来一查才知道。意思是:const char[7]和char[321到二进制操作符cout<"<name: "<<m_name<<endl,我没见过啊,这个错误,然后我又让两个小天才来检查一下,都没有发现这个。

2021-09-08 21:09:58 4561 1

原创 使用链表完成简易的学生管理系统

使用链表完成简易的学生管理系统无非就是增删改查用时半天,写了一个简易版#include <stdio.h>#include <string.h>#include <stdlib.h>void show(void);typedef struct student{ int m_id; char m_name[64]; double m_chinese; double m_math; double m_english; s

2021-09-06 19:56:25 405 1

原创 使用C语言,模拟路由器的工作过程

1.路由器完成不同网段之间的通信,下面通过一个代码来具体演示路由器的工作过程总结:这个项目耗时两天半完成,旨在理解原始套接字如何接收数据,发送数据。同时熟练使用sqlite3数据库模拟两个不同网段进行通信,主要是进行ping的时候。1.两个不同的网段再ping的时候,是ping不通的。2.再ping其他网段的时候,首先是发送arp的请求包,然后再发送icmp数据包,arp来获取目的IP的MAC地址,如果能够找到这个mac地址,那么就能够组装到icmp数据包上,从而完成通信。3.当发送icmp数据

2021-09-03 19:51:20 3039 10

原创 获取当前网段的IP、MAC,并对其进行欺骗

获取当前网段的IP、MAC,并对其进行欺骗这里所说的欺骗,指的是ARP应答欺骗:正常情况下:一个软件在不同网段之间传输数据的时候,第一次并不知道这个数据包怎么传输过去,这个时候,就会以广播的形式,发送一个ARP请求包,如果发现了相关的网络IP,则会返回一个ARP的应答包,其他的IP也接收到了这个ARP就会将这个包丢弃。那么ARP应答包里放的是什么呢?其实就返回的最重要的就是一个MAC地址,当获得了这个MAC那么就能往下继续传递数据包。注意并不是每一次发数据包都会发送这个ARP的请求包,只要一次走通之

2021-08-27 22:23:48 265

原创 浅析TCP的三次握手与四次挥手

TCP三次握手产生时机:调用connect的时候。第一次握手:客服端调用connect函数,向服务器发送SYN数据连接包,请求连接。第二次握手:服务器通过listen函数监听有没有客服端连接,如果有连接的话,通过accept拿出最先的连接的套接字,此时服务器回复一个ACK,SYN的确认连接包。第三次握手:客户端收到服务器发来的确认包,客服端发送一个确认包。三次握手完毕,连接建立,可以进行通信了。TCP四次挥手产生时机:客服端调用close函数第一次挥手:在客服端调用close函数的时候,客服

2021-08-23 19:32:27 127

原创 使用线程完成TCP服务器

使用线程完成TCP服务器tcp特点:有链接,效率低,安全(丢包重传)步骤:创建套接字设置端口复用绑定监听accept取出队列中的第一个客服端创建线程,对每一个客服端同时进行收发消息关闭套接字#include <stdio.h>#include <string.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include

2021-08-22 21:12:00 188

原创 UDP协议实现交流通信

UDP协议实现交流通信1.创建套接字2.地址绑定3.循环的接收消息和发送消息4.关闭套接字#include <stdio.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <unistd.h>#include <string.h>#include <sys/types.h>#include &l

2021-08-22 21:00:32 116

原创 UDP协议实现服务器

UDP协议实现服务器UDP协议的特点:无连接,传输的效率高,但是不安全(可能丢包)步骤:创建套接字绑定本机的地址接收数据关闭套接字#include <stdio.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>int main(int argc,char *argv[]){ //创建套接字 int sockfd=socket(AF_INE

2021-08-22 20:51:48 185

原创 UDP协议实现客服端

UDP协议实现客服端步骤:创建套接字指明接收方的地址发送消息关闭消息#include <stdio.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <unistd.h>int main(int argc,char *argv[]){ //创建套接字 int sockfd=socket(AF_INET,SOCK_

2021-08-22 20:46:50 82

原创 TCP客服端实现

TCP客服端实现步骤:创建套接字连接服务器收发数据关闭套接字#include <stdio.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <sys/types.h>#include <string.h>#include <unistd.h>int main(){ int so

2021-08-22 20:41:38 78

原创 使用进程完成TCP服务器

使用进程完成TCP服务器大致步骤为:创建套接字设置端口复用绑定监听返回当前连接套接字接收,发送消息关闭套接字#include <stdio.h>#include <string.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <sys/types.h>#include <unistd.h&

2021-08-22 20:35:05 91

原创 进程知识点框图总结

进程知识点框图总结

2021-08-07 15:39:35 81

原创 消息队列知识点总结

消息队列知识点总结

2021-08-07 10:22:36 80

原创 有名管道知识点总结

有名管道知识点总结

2021-08-06 22:47:53 84

原创 无名管道知识点总结

这里写自定义目录标题无名管道无名管道希望能够能帮到大家

2021-08-06 20:24:17 65

原创 使用有名管道完成单机QQ(mkfifo)

有名管道有名管道的创建有名管道本质上是一个文件,可以在文件系统中查找到,但是管道的内容是保存到内存的int ret = mikfifo("./a.txt",0666);if(0 == ret){ printf("创建成功!\n");}“a.txt”是创建的有名管道 "./"是在当前目录下面后面的权限给的是只写权限,可以根据自己的需要进行更改2 有名管道的使用使用的时候要先打开这个有名管道写:int fd=open("./fifo_cmd",O_WRONL

2021-07-30 23:01:02 126

原创 使用消息队列,完成单机QQ功能(msgsnd)

消息队列第一步创建key值使用ftok()函数来获得唯一的信息队列标识符-------------------------------------key_t key = ftok("./",2021);if(-1 == key){ perror("ftok");}创建或者打开消息队列创建消息队列,如果已经有了这个队列,那么就是打开 int msgid=msgget(key,IPC_CREAT|0666); IPC_CREAT:如果没有那么就创建 if(-1 == msgid

2021-07-30 21:57:42 269 1

原创 Linux中使用C语言实现cp功能

Linux中使用C语言实现cp功能#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <string.h>int main(int argc, char *argv[]){ int fd, fd2; fd = open(argv[1], O_RD

2021-07-27 20:31:50 236

原创 用C语言输出当前文件夹中所有的文件名opendir

用C语言输出当前文件夹中所有的文件名使用opendir()#include <stdio.h>#include <dirent.h>#include <sys/types.h>int main(){ //打开一个文件目录,opendir中行目录的名字 DIR * dir = opendir("./"); //成功:返回指向该目录的结构体目录 //失败:返回NULL if(dir == NULL) { printf(

2021-07-27 20:26:23 2919

原创 qt使用自带的数据库sqlite(登录,注册)

qt使用sqlite创建数据库 //创建一个数据库 db = QSqlDatabase::addDatabase("QSQLITE");//添加驱动 db.setDatabaseName("stu.db");//数据库的名字2.打开数据库 bool ok = db.open();//如果不存在就创建,存在就打开 if(ok) { qDebug()<<"数据库创建(打开)成功了"; } else {

2021-07-24 22:35:44 4031

原创 QT中文件的读写(注册与登录)

注册按键功能:思路:判断输入的内容有无空格判断是否重名(打开文件,从中查找)写入文件需要包含的头文件#include <QMessageBox>#include <QDebug>#include <QByteArray>#include <QString>connect(ui->pushButton,&QPushButton::clicked,[=](){ QString name,pass,pass2

2021-07-24 20:59:47 1871 3

原创 多态浅析(静态多态,动态多态)

多态多态分为动态多态和静态多态。静态多态:在运行前就决定函数调用的地址,也就是地址早绑定。静态多态包括了:函数重载,运算符重载,和重定义。分别阐述一下:函数重载首先在同一个作用域当中,函数的名字相同,但是函数的参数不同(类型,个数,顺序)void func(void){ cout<<"good! 没有参数"<<endl;}void func(int val){ cout<<"good! 一个int类型参数"<<endl;}

2021-07-19 14:52:07 2418 3

原创 牛客网C/C++专项练习02

只显示 A 盘当前目录中文件主名为三个字符的全部文件的命令 ( )DIR *.*对于int *pa[5] ;的描述,正确的是( )A:pa是一个指向数组的指针,所指向的数组是5个int型元素B:pa是一个指向某个数组第5个元素的指针,该元素是int型变量C:pa[5]表示某个数组第5个元素的值D:pa是一个具有5个元素的指针数组,每个元素是一个int型指针int * pa[]:是一个指针数组,它的本质就是一个数组,而每个元素存储的就是地址。A : 显然错误,和数组指针混淆B:,该

2021-07-17 11:33:22 117

原创 牛客网C/C++专项练习01

若有以下说明和定义,在必要的赋值之后,对fun函数的正确调用语句是()。int fun (int *c) { … }void main(){int (*a)(int*)=fun,*b(),w[10],c;…}A. a=a(w);B. (*a)(&c);C. b=*b(w);D. fun(b);解析:int fun (int c) { … }是一个返回值为int,参数为指针的函数int (a)(int)=fun:函数指针;A:a(w)参数传入w,w为数组,会被编译

2021-07-17 11:10:32 596

原创 C语言碎碎念03基本运算符(连载)

运算符在说运算符的时候必须知道运算符对象,就是这个运算符有几个对象。1+1//那么这个+号有两个运算对象i++//这个++运算符只有一个运算对象a>b?a:b;//三目运算符,?:这个整体是一个运算符,所以有三个对象算数运算符:a+b //加a-b //减a*b //乘a/b //除a%b //取余a+=b; a=a+ba-=b; a=a-ba*=b; a=a*ba/=b; a=a/b虽然都是很简单的运算符,但是我还是想碎碎念一下,我自己刚开始学,经常错的地方1.p

2021-07-17 09:49:10 115 1

原创 C语言碎碎念02预处理define(连载)

define#defined定义一个宏宏替换在预处理阶段完成,宏替换为简单的值替换总结在最后,不想仔细看就直接看最后面。。。宏替换一般分为两种无参的宏#define PI 3.14f那么程序中遇到PI就直接在编译阶段就全部替换为了3.14了2.带参的宏#define MUL(a, b) a*b在遇到MUL(参数,参数)的时候直接替换为a*b。这样直接写感受不明显,下面用两道题来讲解#if A == 3 #define B 3 #else #define B

2021-07-16 23:30:58 93 2

原创 C语言相关的碎碎念01——关键字(连载)

C语言第一个C语言// 行注释 只能注释一行/* 块注释 可以注释多行(不能嵌套) */#if 0 条件注释#endif//stdio.h 标准的输入输出头文件 告知编译器printf存在//头文件 类型、宏定义 函数、变量声明#include <stdio.h>//main是主函数 C语言的程序 入口 一个工程中 只能有一个main函数//main左边的int 是返回值类型//(函数的形参:形参类型 形参名) 是函数内部 获得外部数据的

2021-07-16 21:58:43 92

原创 变量的分区

在做面试题的时候,有一道题是这样的:问下面的变量哪一个是分配在BSS段上?char arr[10]; //全局数组int i =0; //全局变量static int a =0; //静态全局变量void main(){ char arr_min[10]; //局部数组}分析每一个的变量的存储空间以及特点首先呢,内存一般分为五个区1.堆区2.栈区3.全局区4.文字常量区5.代码区全局区的变量即使没

2021-07-16 20:43:01 307

原创 按位与 C&C

面试题中C&Cint c = 23;printf(“%d\n”, c&c);可以看到C是一个int类型的的数据//&,按位与 0101 1010&----- 0000 //两者均为1则为1所以C&C是 0001 0111&0001 0111----------- 0001 0111所以其实两个相同的数进行与运算,其结果都是本身。我是一个学习C/C++的小白,在这个上面,我会分享我遇到的有趣的知识,一起加油吧!...

2021-07-16 20:05:42 88

无名管道的知识点总结概括

无名管道的知识点总结概括

2021-08-13

消息队列有关知识点的总结

c/c++初学者

2021-08-13

进程的知识点总结与概括

C/C++的初学者

2021-08-13

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除