网络编程
文章平均质量分 50
基于c,linux的网络编程
cwdben
Do not go gentle into that good night
展开
-
基于select的回射服务器
server#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <netinet/in.h>#include <sys/time.h>#include <sys/ioctl.h>#include <unistd.h>#include <arpa/inet.h>#include <string.h&g原创 2022-01-17 21:37:45 · 691 阅读 · 0 评论 -
使用tcpdump观察tcp的三次握手,四次挥手,以及http的keep-alive机制
测试方法:服务器使用自己写的,架设在阿里云服务器上。打开两个终端,分别运行cwd@cwd:~$ sudo tcpdump dst 116.62.35.197 and tcpcwd@cwd:~$ sudo tcpdump src 116.62.35.197 and tcp测试一:使用postman发送有keep-alive标志的get请求一次,观察报文情况。测试结果:客户端发向服务器报文:cwd@cwd:~$ sudo tcpdump dst 116.62.35.197 and tcptc原创 2021-12-26 14:42:09 · 1793 阅读 · 0 评论 -
解决webbench运行时卡住的问题
问题描述:使用webbench进行压力测试的时候,在baidu上一般来说正常。在自己的webserver上测试,有时会卡住而没有返回值。在修改为长连接的时候尤其会发生。如下图必须要ctrl+c终止。github上也有这样的问题长连接问题 · Issue #31 · linyacool/WebServer解决思路:找到可能被卡住的地方测试时修改了部分源码进行打印,看每次1000个子进程中被阻塞了的进程数判断。1:代码健壮性增加:从while (s = Socket(host, port)原创 2021-12-23 22:06:25 · 994 阅读 · 0 评论 -
修改webbench支持长连接
概述我们知道HTTP协议采用“请求-应答”模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议);当使用Keep-Alive模式(又称持久连接、连接重用)时,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。http 1.0中默认是关闭的,需要在http头加入"Connection: Keep-Alive",才能启用Keep-原创 2021-12-23 20:35:40 · 511 阅读 · 0 评论 -
webbench详解与源码注释
webbench总共就是三个文件,makefile,socket.c,webbench.cmakefile完成编译,sudo make install安装到 /usr/local/bin目录下面。其实 make install命令就是把可执行文件拷贝到/bin目录下面。INSTALL(1) User Commands INSTALL(1)NAME install - copy files and原创 2021-12-23 20:18:24 · 1009 阅读 · 0 评论 -
python与c++程序通过mqtt通信
mqtt安装与基本测试#安装mosquitto mqtt#引入仓库sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa#更新源sudo apt-get update#安装mosquittosudo apt install mosquitto#安装客户端sudo apt-get install mosquitto-clients######测试#一个终端开启sub mqttmosquitto_sub -h localhost原创 2021-12-11 15:18:47 · 3097 阅读 · 1 评论 -
springboot-redis整合并使用fastjason作序裂化器,存取类对象
目的@SpringBootTestclass Springboot01ApplicationTests { @Autowired private RedisTemplate<Object,Object> redisTemplate; @Test public void redis() { RedisConnection connection = redisTemplate.getConnectionFactory().getConnecti原创 2021-10-30 11:03:31 · 613 阅读 · 0 评论 -
使用sendmsg/recvmsg在进程之间传递文件描述符
需要注意一点,传递一个文件描述符,并不是传递一个文件描述符的值,而是要在接收进程中创建一个新的文件描述符,并且该文件描述符和发送进程中被传递的文件描述符,指向同一个文件。例程#include <sys/socket.h>#include <fcntl.h>#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <assert.h>#include原创 2021-05-13 19:18:14 · 1121 阅读 · 0 评论 -
基于共享内存和信号触发的聊天室服务器方案(包括多进程处理)
源码部分借鉴自游双的《Linux高性能服务器编程》完整源码参见github-chatroom1.全局配置client_data#define BUFFER_SIZE 64#define USER_LIMIT 5#define FD_LIMIT 65535#define MAX_EVENT_NUMBER 1024#define PROCESS_LIMIT 65535int sig_pipefd[2];bool stop_child = false; //子进程的标志位struct cl原创 2021-05-12 17:12:27 · 323 阅读 · 0 评论 -
关于epoll_create的size,以及创建出的句柄epollfd是否需要close探讨
sizeepoll_creat的函数圆形如下:int epoll_create(int size);其中,size的含义值得琢磨。首先参考官方给出的资料:gun库里的注释/* Creates an epoll instance. Returns an fd for the new instance. The "size" parameter is a hint specifying the number of file descriptors to be associated wit原创 2021-05-11 22:11:05 · 919 阅读 · 0 评论 -
基于poll的聊天室程序
源码部分借鉴自游双的《Linux高性能服务器编程》客户端#include <sys/socket.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>#include <assert.h>#include<stdio.h>#include <stdlib.h>#include <netinet/in.h>#include &原创 2021-05-10 08:58:02 · 329 阅读 · 1 评论 -
epoll的ET模式和LT模式的例程与分析
例程来自游双的《Linux高性能服务器编程》#include <sys/socket.h>#include <sys/types.h>#include <sys/epoll.h>#include <fcntl.h>#include <unistd.h>#include <assert.h>#include<stdio.h>#include <stdlib.h>#include <neti原创 2021-05-06 19:12:59 · 208 阅读 · 0 评论 -
aio_read()的例程详解
man手册AIO(7) Linux Programmer's Manual AIO(7)NAME aio - POSIX asynchronous I/O overviewDESCRIPTION The POSIX asynchronous I/O (AIO) interface allows applications to ini‐ tiate one or more I/O原创 2021-05-05 21:59:36 · 1822 阅读 · 0 评论 -
从sockaddr 中获得ip地址并打印
参考链接struct addrinfo *res; // populated elsewhere in your codestruct sockaddr_in *ipv4 = (struct sockaddr_in *)res->ai_addr;char ipAddress[INET_ADDRSTRLEN];inet_ntop(AF_INET, &(ipv4->sin_addr), ipAddress, INET_ADDRSTRLEN);printf("The IP ad原创 2021-04-14 20:49:45 · 4504 阅读 · 0 评论 -
Epoll写的一个tcp回射服务器
运行环境:Linux/* include fig01 */#include "unp.h"#include <limits.h> /* for OPEN_MAX */#include <sys/epoll.h>#define INET_ADDRSTRLEN 16#define OPEN_MAX FOPEN_MAX#define NOTDEFintmain(int argc, char **argv){ int listenfd, connfd;原创 2021-04-09 08:21:50 · 143 阅读 · 0 评论 -
bind:address already in use 端口已占用解决办法
lsof -i:9877root@cwd:/home/cwd/code/unpv13e/tcpcliserv# lsof -i:9877COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEtcpserv01 14189 root 3u IPv4 91150 0t0 TCP *:9877 (LISTEN)root@cwd:/home/cwd/code/unpv13e/tcpcliserv# kill -9 14189原创 2021-04-01 17:08:55 · 3313 阅读 · 0 评论