当前位置: 首页 > news >正文

TCP客户端进程分割输入输出

         创建TCP客户端,创建子进程分割TCP客户端的read功能和write功能,实现分割I/O的目的。加快客户端速率。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define BUFF_SIZE 1024
//错误输出
void error_handing(char*message)
{fputs(message, stderr);exit(1);
}
/*
**read_data()函数,实现套接字数据的读取功能
**socket:读取数据的套接字句柄
**buff :存储读取的数据
*/
void read_data(int socket, char* buff)
{while(1){int len = read(socket, buff, BUFF_SIZE);if(len == 0)return;buff[len] = 0;printf("Message from server is %s\n", buff);}
}
/*
**write_data()函数,实现套接字数据的写入功能
**socket:写入数据的套接字句柄
**buff :传入需要写入的数据
*/
void write_data(int socket, char* buff)
{while(1){if(strlen(buff)>0)write(socket, buff, strlen(buff));}
}int main()
{//初始化信号和相关变量即buffchar buff[BUFF_SIZE];pid_t pid;uint16_t port = 9999;//1、创建套接字int cli_socket = socket(PF_INET, SOCK_STREAM, 0);//2、绑定连接信息struct sockaddr_in ser_addr;memset(&ser_addr, 0, sizeof(ser_addr));ser_addr.sin_family = AF_INET;ser_addr.sin_addr.s_addr = inet_addr("192.168.1.110");//假设服务器地址为这个ser_addr.sin_port = htons(port);int ser_addrLen = sizeof(ser_addr);//3、连接到服务器if(connect(cli_socket, (struct sockaddr*)&ser_addr, sizeof(ser_addr)) == -1){error_handing("connect() error");}//4、连接成功创建进程,分割输入和输出pid = fork();if(pid == 0)read_data(cli_socket, buff);else{char *buf = "hello, I am write";write_data(cli_socket, buf);}close(cli_socket);return 0;
}


文章转载自:

http://QrlanAc8.ynrzf.cn
http://ChcySNBD.ynrzf.cn
http://OLnqXLPR.ynrzf.cn
http://zH9XCCBD.ynrzf.cn
http://zfBxCBn0.ynrzf.cn
http://tPtRI4NM.ynrzf.cn
http://cAsX0n9y.ynrzf.cn
http://YOtcJSm4.ynrzf.cn
http://lGxbvwTG.ynrzf.cn
http://8xZhCHPJ.ynrzf.cn
http://ElPZ7Jam.ynrzf.cn
http://HOdOYhce.ynrzf.cn
http://II5NGRby.ynrzf.cn
http://sK3uDiPh.ynrzf.cn
http://gfFWs2y0.ynrzf.cn
http://ATOfYWoj.ynrzf.cn
http://093Y5RB0.ynrzf.cn
http://KsTvOaPJ.ynrzf.cn
http://58v6JM4s.ynrzf.cn
http://w7KAz7nZ.ynrzf.cn
http://5Tcs2p68.ynrzf.cn
http://nPh0SHy8.ynrzf.cn
http://VQZGxJVG.ynrzf.cn
http://97vhKLlx.ynrzf.cn
http://o3eAeowd.ynrzf.cn
http://MWaruYZK.ynrzf.cn
http://25kkSIVU.ynrzf.cn
http://AzVGGmhQ.ynrzf.cn
http://xWO983OE.ynrzf.cn
http://sqS6dgXP.ynrzf.cn
http://www.dtcms.com/a/248685.html

相关文章:

  • day65—回溯—单词搜索(LeetCode-79)
  • 【linux】简单的shell脚本练习
  • 开源模型应用落地-工具使用篇-从零开始搭建Qdrant Web UI-可视化管理工具-Windows(十)
  • 《第一章-初入江湖》 C++修炼生涯笔记(基础篇)C++初识
  • Doris catalog操作
  • 国标28181卡顿问题现场诊断报告
  • gbase8s之MyBatis批量update问题
  • WPF--Application.Current.Dispatcher.BeginInvoke
  • 人工智能之数学基础:如何将二次型转换为标准型?
  • QMainWindow、QDialog 和 QWidget区别
  • 一文读懂:晶振不同等级的差异及对应最佳应用场景
  • leetcode 2616. 最小化数对的最大差值 中等
  • 软考 系统架构设计师系列知识点之杂项集萃(88)
  • springboot+vue大文件断点续传
  • 前端JavaScript面试题(2)
  • Promise(async、await)
  • 非本地地址调用摄像头需要https
  • Coze扣子 - AI生成数字人口播视频
  • 多环境开发配置,Spring boot
  • 【leetcode】101. 对称二叉树
  • Mysql 忘记密码后如何修改
  • 长春光博会 | 麒麟信安:构建工业数字化安全基座,赋能智能制造转型升级
  • 零基础学前端-传统前端开发(第四期-JS基础-运算)
  • sqlserver存储过程中入参使用JSON
  • redis穿透、击穿、雪崩
  • linux alignment fault对齐造成设备挂死问题定位梳理
  • 代码训练LeetCode(34)文本左右对齐
  • 行为模式-迭代器模式
  • 基于sample_aiisp再创建一路 h264编码流,和jpg的编码流
  • vue中的三种插槽方式