
网络编程
宇龍_
有些白嫖党连个赞都不点甚至直接抄走了说原创,新发布的都写到专栏里吧,哎。
私聊给群号,可进Q群咨询问题。
展开
-
基于handy的聊天室
handy是c++的网络库,其简单易用,容易上手。github地址:https://github.com/yedf/handyhttps://github.com/yedf/handy以下便实现了一个聊天室,任意一个人发送的数据会被转发给其他所有人,参考的是示例中的chat.cc,并做了一些修改,代码如下:#include <handy/handy.h>#include <map>using namespace std;using namespace hand原创 2021-11-09 10:57:55 · 389 阅读 · 0 评论 -
使用epoll的时候是否要将socket设置成非阻塞?
epoll有两种模式,分别是水平触发(ET模式)和边沿触发(LT)关于二者的区别,这里举一个例子,A向B一次发送了4K的数据,此时B已经调用了的epoll_wait会返回,这时假设B只读了2K的数据,还剩余2K未读。此时水平触发和边沿触发的不同点就体现出来了,再次调用epoll_wait后,边沿触发模式下不会返回,而水平触发则会返回。也就是说边沿触发只触发一次,需要程序一次读完所有数据,一般在read/recv/accept的外层需要加一个循环,直到没有数据,但是当某次循环下数据恰好读完后再调用rea原创 2021-09-27 16:33:56 · 849 阅读 · 2 评论 -
getaddrinfo解析域名代码示例
getaddrinfo常用于解析域名,并代替gethostbyname使用直接上代码:getaddrinfo封装的函数如下://函数返回已经连接上的套接字描述符,返回-1则表示失败!否则成功int tcp_connect(const char *host,const char *port){ int sockfd = -1,n = -1; struct addrinfo hints,*res,*ressave; bzero(&hints,sizeof(st原创 2021-08-27 10:03:46 · 918 阅读 · 0 评论 -
gethostbyname、getaddrinfo崩溃
前言:最近在做一个程序,静态链接了gethostbyname和getaddrinfo函数,发现一旦在多线程中调用这两个函数程序就会崩溃,即便是加了互斥锁也会崩溃。解决问题的三个方法:1、放弃静态链接,采用动态链接。2、主线程中解析好域名后只留存ip给子线程用。3、将相关线程模块独立成一个单独的进程。...原创 2021-08-27 09:46:01 · 1121 阅读 · 0 评论 -
epoll_wait被signal信号中断时的处理
在epoll_wait阻塞期间,signal信号会打断该阻塞,使其返回-1并将errno设置成EINTR,此时可以在主循环中判断并处理该情况,一般continue即可!原创 2021-07-29 20:36:12 · 1124 阅读 · 0 评论 -
TCP拆包方案(C/C++)
消息的结构是【前4个字节的消息头】+【消息体】,消息头的值是消息体的长度当然这里仅提供一种思路、方案,具体的代码优化,比如像GetBodyBuff函数中存在来回拷贝的情况,可以根据实际情况进行优化,拆包函数如下:#define MAX_BUFF_SIZE 4096////接口说明:从缓存区中提取消息体////参数说明://buff_read,存放tcp数据的缓存区//buff_read_size,第一个参数缓冲区的大小//buff_msg存放提取出来的消息体缓冲区,需要手动清空//bu原创 2021-07-27 10:47:32 · 1854 阅读 · 0 评论 -
基于epoll的echo服务器(回显服务器)
#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <netinet/in.h>#include <string.h>#include <iostream>#include <signal.h>#include <vector>#include <poll.h>#include <unist.原创 2021-07-26 14:39:02 · 343 阅读 · 0 评论 -
基于poll的echo服务器(回显服务器)
代码比较简单,是用C/C++混写的,有疑问可以下方留言#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <netinet/in.h>#include <string.h>#include <iostream>#include <signal.h>#include <vector>#include <原创 2021-07-25 12:57:57 · 256 阅读 · 0 评论 -
linux查看端口TCP连接情况
netstat -ano | grep 19833 #查看19833端口的连接情况从上图结果可以分析出一些信息:1、第一个为服务器的监听套接字,其监听队列中存在两个连接未处理,而整个服务器连接到19833端口的连接才3个。2、其中源主机端口为37534和37532的接收队列中有17303字节的数据未处理。3、三个连接的发送队列均无数据。...原创 2021-07-18 21:42:45 · 7176 阅读 · 1 评论 -
yhirose服务器端发送文件
yhirose是c++开源的http库(github地址:https://github.com/yhirose/cpp-httplib),最近结合Qt用了一段时间,简直不要太好用。下面是应用到的发送文件的场景:httplib::Server svr;QByteArray btArr;svr.Get("/file", [&](const httplib::Request &, httplib::Response &res) { QFile file("E:/test.ex原创 2021-01-28 11:26:22 · 292 阅读 · 0 评论 -
服务器监听127.0.0.1与0.0.0.0的区别
struct sockaddr_in local; bzero(&local, sizeof(local)); local.sin_port = htons(12345);//监听12345这个端口 local.sin_family = AF_INET; //local.sin_addr.s_addr = inet_addr("127.0.0.1"...原创 2020-04-29 21:04:30 · 3451 阅读 · 0 评论 -
udp内网穿透的要点
UDP打洞的过程:1、双方都通过UDP与服务器通讯后,网关默认就是做了一个外网IP和端口号与你内网IP与端口号的映射,这个无需设置的,服务器也不需要知道客户的真正内网IP2、用户A先通过服务器知道用户B的外网地址与端口3、用户A向用户B的外网地址与端口发送消息,4、在这一次发送中,用户B的网关会拒收这条消息,因为它的映射中并没有这条规则。5、但是用户A的网关就...原创 2019-11-07 20:40:50 · 4153 阅读 · 0 评论 -
VC++ TCP编程实例
直接上代码客户端:// TcpClient.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <winsock2.h>#pragma comment(lib, "WS2_32")#include <iostream>#include "../../public/Message.h"using na...原创 2019-09-24 20:09:52 · 10747 阅读 · 0 评论 -
C/C++基于TCP的通信协议解决方案
经过本人的分析与项目实战,一种基于收发结构体的方案是非常可靠且方便的。具体方法是,所有的结构体继承自一个结构体,stBase,而stBase的成员只有一个整形的消息id,将收到的消息存到缓冲区后(处理好粘包),将缓冲区强制转换成stBase,通过id来判断对应的业务消息,再强制转换成对应的结构体。消息的定义:这里处理一个基结构体外,只写了两个业务结构体,struct stBa...原创 2019-09-19 21:37:02 · 11560 阅读 · 0 评论 -
C++常用库之网络库
C++一个很大的用途就是作为网络层组件的开发语言。C++开发的第三方网络库也比较多。其实,c语言下的网络库也不少。现在简单介绍一下。ACE库ACE是一个大型的中间件产品,代码有几十万行,非常宏大,里面使用了一堆的设计模式,架构了一层又一层,具体使用的时候, 要根据情况,要看从那一层来进行使用。而且,它也支持跨平台。现在基本上都把ACE当成一个框架,它的主要应用场景是高...原创 2019-04-16 20:43:39 · 25904 阅读 · 3 评论 -
Linux网络编程学习路线
转载自:https://blog.youkuaiyun.com/lianghe_work/article一、网络应用层编程1、Linux网络编程01——网络协议入门2、Linux网络编程02——无连接和面向连接的区别3、Linux网络编程03——字节序和地址转换4、Linux网络编程04——套接字5、Linux网络编程05——C/S与B/S架构的区别6、Linux网络编程0...转载 2019-03-26 20:38:52 · 479 阅读 · 0 评论 -
Linux IO模型和网络编程模型
目录Linux IO模型 同步阻塞 同步非阻塞 IO复用 信号驱动 异步非阻塞 网络编程模型 BIO NIO 总结术语概念描述:IO有内存IO、网络IO和磁盘IO三种,通常我们说的IO指的是后两者。阻塞和非阻塞,是函数/方法的实现方式,即在数据就绪之前是立刻返回还是等待。以文件IO为例,一个IO读过程是文件数据从磁盘→内核缓冲区→用户内...转载 2019-03-04 21:26:08 · 190 阅读 · 0 评论 -
学习笔记——C++实现ARP欺骗
以下代码大体上是没有问题的,可以根据自己的一些需求进行修改!谢谢指正错误在课设期间,从网上学习了简单的实现ARP欺骗ARP欺骗的原理很简单:通过不断的向目标发送ARP包,致使目标主机的ARP缓存表中正确的IP映射的是错误的MAC地址在书上的介绍中,采用了WinPcap的开发包,这样很方便的对网卡进行操作所以,首先需要安装winpacp,并下载开发者包https://www......原创 2019-01-31 11:14:27 · 2689 阅读 · 1 评论 -
看完后,搞懂ARP的工作原理,其实并不难(好文)
原址本期,我就来解答一下关于ARP的工作原理吧! 思路1、思考ARP到底是干嘛的? 为什么要有它?why? 2、掌握ARP的工作原理。技术人,要掌握一种技术,绝对离不开以上两点基本思路,带着这两个思路去学习新技术,你绝对是不可能学不会的。再笨,你也会学得很深刻的。甚至,你还可以有更多的思路,比如,可不可以没有它? 有它?跟没有它的情况又是什么样的?等等。 1、ARP到...转载 2019-01-30 15:25:58 · 805 阅读 · 0 评论 -
TCP的粘包现象
看面经时,看到有面试官问TCP的粘包问题。想起来研一做购物车处理数据更新时遇到粘包问题,就总结一下吧。1 什么是粘包现象 TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。2 为什么出现粘包现象 (1)发送方原因 我们知道,TCP默认会使用Nagle算法。而Nagle算法主要做两件事:1)只有上一个分组得到...转载 2019-01-02 22:31:16 · 212 阅读 · 0 评论