
网络编程
文章平均质量分 55
编程小耗子
本人比较喜欢高性能服务器开发。
在校曾获奖:
中国大学生计算机设计大赛国赛三等奖;
龙鼎杯河北二等奖;
蓝桥杯省赛三等奖;
CCPC河北省赛三等奖;
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
通过fd链接去获取相应的本地地址和远端地址
## 通过fd链接去获取相应的本地地址和远端地址```cint get_ip_and_port_by_fd(int fd, char* local_ip, int* local_port, char* peer_ip, int* peer_port){ if((!local_ip || !local_port) && (!peer_ip || !peer_port)){ printf("ip or port mem is null\n");...原创 2021-01-20 23:35:10 · 925 阅读 · 1 评论 -
服务器----分布式锁原理
锁线程锁 lock(mutex) 资源操作 unlock(mutex)进程锁(nginx 中 accept 锁-共享内存+信号量)分布式锁 在不同机器的进程的锁分布式锁的实现方案数据库 redis, mysqlzookeeper分布式锁有哪些特征互斥性。可重入性,一个进程允许递归获取锁(需要递归释放锁)。锁超时(进程 crash 掉, 需要考虑释放分布式锁)。高效、 高可用(redis, zk)。公平锁和非公平锁,按获取锁顺序执行, 反之就是原创 2020-11-22 23:36:21 · 261 阅读 · 0 评论 -
tcp udp数据报定义结构体
文章链接:https://codemouse.online/archives/2020-06-30-21-08-22tcp udp数据报定义结构体由于结构体写在结构体里面容易出现结构体内存对齐问题,需要将对齐值改为1,防止出错。#pragma pack(1) //设置对齐数udp报文头定义:struct udphdr { unsigned short sport; unsigned short dport; unsigned short length; unsigned s原创 2020-06-30 21:09:43 · 703 阅读 · 0 评论 -
高性能服务器C10K到C1000K到C10M的转变路程
文章链接:https://codemouse.online/archives/2020-06-26-17-51-36网络五元组五元组标识一个网络fd的唯一网络fd --> 五元组(sip,dip,sport,dport,proto)c1000k服务器的并发量条件(百万并发)服务器能够承载的客户端数量。(最基本条件)5w以上的应供应操作。(也就是客户端的5%)对数据库的操作。磁盘的操作。(日志,文件。。)CPU占用率60%。(留下40%用来应付突发情况)内存占用率80%。系统限原创 2020-06-26 18:00:22 · 564 阅读 · 0 评论 -
高性能服务器---异步http客户端
文章链接:https://codemouse.online/archives/2020-06-07180358做法流程1. init_context a.pthread_create b.epoll_create2.uninit_context() a.pthread_cannel b.close3.commit() a.准备socket b.connect c.protocol; dns/http/redis/mysql d.send e.epoll_ctl(add,sockfd原创 2020-06-24 23:23:36 · 208 阅读 · 1 评论 -
给服务端一个shell控制端
文章链接:https://codemouse.online/archives/2020-04-02182636服务器开启监听nc -lvp 6666连接服务器,并给服务端一个shellvoid start_reverse_shell(char *bd_ip, unsigned short int bd_port){ int sd; struct sockaddr_in serv_addr; struct hostent *server; sd = soc原创 2020-06-23 10:49:57 · 193 阅读 · 0 评论 -
如何开启原始套接字并发送自定义ping包(icmp)
文章链接:https://codemouse.online/archives/2020-04-02182132开启原始套接字struct protoent *protocol; if( (protocol=getprotobyname("icmp"))==NULL) { perror("getprotobyname"); exit(1); } if( (sockfd=socket(AF_原创 2020-06-23 10:49:04 · 1280 阅读 · 0 评论 -
gethostbyname获取主机信息
文章链接:https://codemouse.online/archives/2020-04-02162649获取主机信息#include <netdb.h>extern int h_errno;struct hostent *gethostbyname(const char *name);#include <sys/socket.h> /* for AF_INET */struct hostent *gethostbyaddr(const void *a原创 2020-06-23 10:47:27 · 176 阅读 · 0 评论 -
通过监听的fd获取对端地址
文章链接:https://codemouse.online/archives/2020-03-16162906通过监听的fd获取对端地址void getipAddr(char ipbuf[], int fd){ struct sockaddr_storage addr; socklen_t len = sizeof(addr); // 获取数据放到sockaddr结构体 printf("%d", getpeername(fd, (struct sockaddr*)&ad原创 2020-06-21 22:49:09 · 513 阅读 · 0 评论 -
黏包问题解决方案
文章链接:https://codemouse.online/archives/2020-03-13202900在接收数据的时候,有可能没有一次接收结束,产生黏包,所以要做重复接收.int recvPacket(int epollfd, char *buf){ char packet[MAXBUFLEN] = { 0 }; char * packetPtr = packet; int nBytesNeed = MAXBUFLEN; int nBytesRecv = 0; int原创 2020-06-20 20:14:31 · 295 阅读 · 0 评论 -
网络编程之select使用说明
文章链接:https://codemouse.online/archives/2020-03-10-201000函数说明void FD_CLR(int fd, fd_set *set);将fd文件描述符从集合中删除int FD_ISSET(int fd, fd_set *set);判断该fd是否在集合内void FD_SET(int fd, fd_set *set);将fd添加到集合中void FD_ZERO(fd_set *set);将集合清空in原创 2020-06-20 19:40:04 · 285 阅读 · 0 评论 -
UDP的点对点,广播,组播
文章链接:https://codemouse.online/archives/2020-03-01-235956UDP应用UDP的点对点通信路由器是不转发广播包的交换机会转发广播数据包UDP广播数据包广播只能在一个广播域(局域网)中传播,而不能跨网段传播组播数据包能够在组播组中进行传播的,并且路由器可以进行组播数据转发如何识别广播包MAC: 目的MAC是ff:ff:ff:ff:ff:ffIP: 10.0.0.0/8 ----> 10.255.255.255这个网段原创 2020-06-19 19:19:59 · 2380 阅读 · 0 评论 -
设置服务器监听,获取fd
文章链接:https://codemouse.online/archives/2020-02-29-102714设置服务器监听,获取fdint SRV_create_listen_fd(){ int listenfd = socket(AF_INET, SOCK_STREAM, 0); if(listenfd == -1) { ERR_PRINT("socket fail, listenfd:%d\n",listenfd); return fa原创 2020-06-16 23:15:17 · 316 阅读 · 0 评论 -
计算机网络的体系结构与协议首部
文章链接:https://codemouse.online/archives/2020-02-28-23-26-27分层的概念应用层(+表示层+会话层) —>HTTP HTTPS SSH…解决业务逻辑的问题传输层 TCP/UDP ->端口解决找到主机后,数据应该去哪的问题.引入了端口的概念网络层 IP解决远程传输问题数据链路层(+物理层) MAC–>通过ARP协议获取对端mac地址解决找到近端设备IP的格式用户输入:点分十进制 程序识别:二进原创 2020-06-16 23:12:05 · 151 阅读 · 0 评论 -
网络编程之IO复用epoll框架
文章链接:https://codemouse.online/archives/2020-02-24153745epoll结构体的定义:struct epoll_event { __uint32_t events; /* epoll event */ epoll_data_t data; /* User data variable */};typedef union epoll_data { void *ptr; int fd; __uint32_t u32; __ui原创 2020-06-15 17:21:58 · 138 阅读 · 0 评论 -
异步http客户端
做法流程1. init_context a.pthread_create b.epoll_create2.uninit_context() a.pthread_cannel b.close3.commit() a.准备socket b.connect c.protocol; dns/http/redis/mysql d.send e.epoll_ctl(add,sockfd);4.callback() a.epoll_wait(); b.recv()异步客户端#in原创 2020-06-14 23:09:58 · 246 阅读 · 0 评论 -
通过监听的fd获取对端地址
通过监听的fd获取对端地址void getipAddr(char ipbuf[], int fd){ struct sockaddr_storage addr; socklen_t len = sizeof(addr); // 获取数据放到sockaddr结构体 printf("%d", getpeername(fd, (struct sockaddr*)&ad...原创 2020-03-16 19:37:41 · 888 阅读 · 0 评论