使用writev将多个小数据包合并发送,使用sysconf(_SC_IOV_MAX)查看writev函数最多允许数组大小

news/2024/6/2 10:50:08 标签: 网络

服务器代码使用《select在标准输出和套接字上进行监控》里边的selectServerInTCPIPbook.c代码,gcc selectServerInTCPIPbook.c -o selectServerInTCPIPbook进行编译,然后执行./selectServerInTCPIPbook 80808080端口上监听。
在这里插入图片描述

关于writev的使用,可以参考《writev函数的使用测试》。

writevToSocket.c里边的代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>
int main(int argc, char **argv) {
    if (argc != 3) {
        printf("usage: select01 <IPaddress> or <Port>");
    }


    int socket_fd;
    socket_fd = socket(AF_INET, SOCK_STREAM, 0);

    struct sockaddr_in server_addr;
    bzero(&server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(atoi(argv[2]));
    inet_pton(AF_INET, argv[1], &server_addr.sin_addr);

    socklen_t server_len = sizeof(server_addr);
    int connect_rt = connect(socket_fd, (struct sockaddr *) &server_addr, server_len);
    if (connect_rt < 0) {
        printf("connect failed ");
        exit(1);
    }

    char buf[128];
    struct iovec iov[2];

    char *send_one = "hello,";
    iov[0].iov_base = send_one;
    iov[0].iov_len = strlen(send_one);
    iov[1].iov_base = buf;
    while (fgets(buf, sizeof(buf), stdin) != NULL) {
        iov[1].iov_len = strlen(buf)-1;//将键盘输入的回车符截掉
        int n = htonl(iov[1].iov_len);
        if (writev(socket_fd, iov, 2) < 0)
            printf("writev failure");
    }
    exit(0);
}

这段代码会向服务器端发送hello,加上你输入的字符串,比如你要是输入了test,那么往服务器端发送的是hello,test
gcc writevToSocket.c -o writevToSocket将代码进行编译,然后./writevToSocket 127.0.0.1 8080运行程序,然后输入想要发送的字符串之后,按下回车键。
在这里插入图片描述

sysconfTest.c代码如下:

#include<stdio.h>
#include<unistd.h>

int main(int argc,char *argv[]){
        printf("%ld\n",sysconf(_SC_IOV_MAX));
        return 0;
}

gcc sysconfTest.c -o sysconfTest将代码进行编译,./sysconfTest显示出来的结果就是writev 函数一次性最多允许数组的大小
在这里插入图片描述

此文章为11月Day 20学习笔记,内容来源于极客时间《网络编程实战》。


http://www.niftyadmin.cn/n/5197975.html

相关文章

如何判断sql注入流量特征

如何判断sql注入流量特征 以dvwa的sql注入为例 首先构造一个完整的sql注入请求包 GET /dvwa_2.0.1/vulnerabilities/sqli/?id1&SubmitSubmit HTTP/1.1 Host: 10.9.47.41 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.…

基于蜜獾算法优化概率神经网络PNN的分类预测 - 附代码

基于蜜獾算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蜜獾算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蜜獾优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

win10手机投屏到电脑的操作方法

工具/原料&#xff1a; 系统版本&#xff1a;iOS 15.3,HarmonyOS 2.0.0&#xff0c;windows10系统 品牌型号&#xff1a;iPhone 13,HUAWEI Mate 40 Pro&#xff0c;联想小新air14 方法/步骤&#xff1a;方法一&#xff1a;安卓手机使用无线投屏功能投屏到win10电脑 1、保持手…

YOLOv8 热力图可视化 | 已适配最新版

源码地址:https://github.com/jacobgil/pytorch-grad-cam 首先要安装一个包: pip install grad-cam -i https://pypi.tuna.tsinghua.edu.cn/simple源代码如下: # pip install grad-cam -i https://pypi.tuna.tsinghua.edu.cn/simple import warningswarnings.filterwarning…

Keras训练一个基本体系化的分类模型流程案例

Keras训练一个基本体系化的分类模型流程案例 import numpy as np from keras.datasets import mnist from keras.utils import np_utils # 导入keras提供的numpy工具包 from keras.models import Sequential from keras.layers import Dense from keras.optimizers impo…

机器学习赋予用户“超人”的能力来打开和控制虚拟现实中的工具

原创 | 文 BFT机器人 最近&#xff0c;剑桥的研究人员开发了一种虚拟现实应用程序&#xff0c;只需用户手部的移动即可打开和控制一系列3D建模工具。 来自剑桥大学的研究人员利用机器学习开发了“HotGestures”类似于许多桌面应用程序中使用的热键&#xff08;快捷键&#xff…

苹果(Apple)公司的新产品开发流程(一)

目录 简介 ANPP CSDN学院推荐 作者简介 简介 苹果这家企业给人的长期印象就是颠覆和创新。 而流程跟创新似乎是完全不搭边的两个平行线&#xff1a; 流程是一个做事的标准&#xff0c;定义了权力的边界&#xff0c;对应人员按章办事&#xff1b;而创新的主旋律是发散&am…

Linux文件目录以及文件类型

文章目录 Home根目录 //bin/sbin/etc/root/lib/dev/proc/sys/tmp/boot/mnt/media/usr 文件类型 Home 当尝试使用gedit等编辑器保存文件时&#xff0c;系统默认通常会先打开个人用户的“家”&#xff08;home&#xff09;目录&#xff0c; 建议在通常情况下个人相关的内容也是保…