TCP并发服务器多线程
#include<stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* superset of previous */
#include<stdlib.h>
#include <strings.h>
#include<unistd.h>#include <string.h>#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
//./client 192.168.182.144 5001#define SERV_PORT 5001
#define SERV_IP_ADDR "192.168.157.34"
#define BUFSIZE 1024
#define QUIT_STR "QUIT"int main(int argc,char **argv)
{int fd = -1;if(argc!=3){exit(1);}int port = -1;port = atoi(argv[2]);fd = socket(AF_INET,SOCK_STREAM,0);if(fd<0){perror("socket");exit(1);}struct sockaddr_in sin;bzero(&sin,sizeof(sin));sin.sin_family = AF_INET;sin.sin_port = htons(port);sin.sin_addr.s_addr = inet_addr(argv[1]);if(connect(fd,(struct sockaddr*)&sin,sizeof(sin))<0){perror("connect");exit(1);}char buf[BUFSIZE];while(1){bzero(buf,BUFSIZE);if(fgets(buf,BUFSIZE-1,stdin)==NULL){continue;}write(fd,buf,strlen(buf));if(!strncasecmp(buf,QUIT_STR,strlen(QUIT_STR))){break;}}return 0;} service
#include<stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* superset of previous */
#include<stdlib.h>
#include <strings.h>
#include<unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include<pthread.h>
#define SERV_PORT 5001
#define SERV_IP_ADDR "192.168.157.34"
#define BACKLOG 5
#define BUFSIZE 1024
#define QUIT_STR "QUIT"
void* client_data_handle(void* arg);
int main(int argc,char *argv[])
{//socketint fd = -1;pthread_t tid;fd = socket(AF_INET,SOCK_STREAM,0);if(fd < 0){perror("socket");exit(1);}/*struct sockaddr_in {sa_family_t sin_family; address family: AF_INET in_port_t sin_port; port in network byte order struct in_addr sin_addr; internet address };Internet address. struct in_addr {uint32_t s_addr; address in network byte order }; */struct sockaddr_in sin;bzero(&sin,sizeof(sin));sin.sin_family = AF_INET;sin.sin_port = htons(SERV_PORT);sin.sin_addr.s_addr = INADDR_ANY;//bingif(bind(fd,(struct sockaddr *)&sin,sizeof(sin))<0){perror("bind");exit(1);}//listenif(listen(fd,BACKLOG)<0){perror("listen");exit(1);}int newfd = -1;char ipv4_addr[16];struct sockaddr_in clin;socklen_t sockaddr_len = sizeof(clin);while(1){newfd = accept(fd,(struct sockaddr *)&clin,&sockaddr_len);if(newfd<0){perror("accept");exit(1);}if(!inet_ntop(AF_INET,(void *)&clin.sin_addr,ipv4_addr,sizeof(clin))){perror("inet_ntop");exit(1);}printf("client :(%s,%d) is connect!\n",ipv4_addr,ntohs(clin.sin_port));pthread_create(&tid,NULL,client_data_handle,(void *)&newfd);}close(fd);//readchar buf[BUFSIZE];int ret = -1;while(1){do{bzero(buf,BUFSIZE);ret = read(newfd,buf,BUFSIZE-1);}while(ret<1);if(ret<0){perror("read");exit(1);}if(!ret){break;}printf("receive data :%s \n",buf);if(!strncasecmp(buf,QUIT_STR,strlen(QUIT_STR))){printf("Client is exiting!\n");break;}}
}void* client_data_handle(void* arg)
{int newfd = *(int *)arg;char buf[BUFSIZE];int ret = -1;printf("handle thread :newfd= %d\n",newfd);while(1){do{bzero(buf,BUFSIZE);ret = read(newfd,buf,BUFSIZE-1);}while(ret<1);if(ret<0){perror("read");exit(1);}if(!ret){break;}printf("receive data :%s \n",buf);if(!strncasecmp(buf,QUIT_STR,strlen(QUIT_STR))){printf("Client is exiting!\n");break;}}close(newfd);return NULL;}
结果

相关文章:
TCP并发服务器多线程
1.创建线程‐‐pthread_create int pthread_create( pthread_t *thread, // 线程 ID 无符号长整型 const pthread_attr_t *attr, // 线程属性, NULL void *(*start_routine)(void *), // 线程处理函数 void *arg); // 线程处理函数 参数: pthrea…...
技术速递|C# 13:探索最新的预览功能
作者:Kathleen Dollard 排版:Alan Wang C# 13 已初具雏形,其新特性侧重于灵活性、性能以及使您最喜欢的功能在日常中变得更容易使用。我们以公开的方式构建 C#,在今年的 Microsoft Build 大会上,我们会让您一睹 C# 13 …...
Python设计模式:巧用元类创建单例模式!
✨ 内容: 今天我们来探讨一个高级且实用的Python概念——元类(Metaclasses)。元类是创建类的类,它们可以用来控制类的行为。通过本次练习,我们将学习如何使用元类来实现单例模式,确保某个类在整个程序中只…...
构建自主可控的工业操作系统,筑牢我国工业安全堡垒
构建自主可控的工业操作系统,筑牢我国工业安全堡垒,鸿道(Intewell)操作系统为国家工业发展保驾护航。 7月19日,全球多地安装微软操作系统的电脑设备出现大规模宕机,导致“蓝屏”现象,严重影响了航空、铁路、医疗、金…...
WPF串口通讯程序
目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 using HardwareCommunications; using System.IO.Ports; using System.Windows;namespace PortTest {/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainW…...
汽车技术智能化程度不断提升,线束可靠性如何设计?
随着汽车技术的高速发展,汽车自动化、智能化程度的逐步提高,人们对汽车的安全性、舒适性、娱乐性等要求也不断提高,加上汽车节能减排法规的不断严峻,整车电气设备不断增加,作为连接汽车各种电器设备“神经网络”的整车…...
实现Nginx的反向代理和负载均衡
一、反向代理和负载均衡简介 1.1、反向代理 反向代理(reverse proxy)指:以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端。此时代理服务器对外就表现为一个反向代理服务器。 反向代…...
【算法】子集
难度:中等 题目: 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,…...
Web前端:HTML篇(一)
HTML简介: 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。 您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上,由浏览器…...
ActiViz中的选择点vtkWorldPointPicker
文章目录 1. vtkWorldPointPicker简介2. 类的位置和继承关系3. 选择机制4. 返回的信息5. 选择的条件和参数6. 与屏幕空间选择器的比较7. 性能特征8. 应用场景9. 与其他vtk选择器的集成10. 完整示例总结1. vtkWorldPointPicker简介 vtkWorldPointPicker是Visualization Toolkit…...
如何开启或者关闭 Windows 安全登录?
什么是安全登录 什么是 Windows 安全登录呢?安全登录是 Windows 附加的一个组件,它可以在用户需要登录的之前先将登录界面隐藏,只有当用户按下 CtrlAltDelete 之后才出现登录屏幕,这样可以防止那些模拟登录界面的程序获取密码信息…...
【目标检测】Anaconda+PyTorch配置
前言 本文主要介绍在windows系统上的Anaconda、PyTorch关键步骤安装,为使用yolo所需的环境配置完善。同时也算是记录下我的配置流程,为以后用到的时候能笔记查阅。 Anaconda 软件安装 Anaconda官网:https://www.anaconda.com/ 另外&#…...
什么是离线语音识别芯片?与在线语音识别的区别
离线语音识别芯片是一种不需要联网和其他外部设备支持,上电即可使用的语音识别系统。它的应用场合相对单一,主要适用于智能家电、语音遥控器、智能玩具等,以及车载声控和一部分智能家居。离线语音识别芯片的特点包括小词汇量、…...
使用Diffusion Models进行街景视频生成
Diffusion Models专栏文章汇总:入门与实战 前言:街景图生成相当有挑战性,目前的文本到视频的方法仅限于生成有限范围的场景的短视频,文本到3D的方法可以生成单独的对象但不是整个城市。除此之外街景图对一致性的要求相当高&#x…...
UFO:革新Windows操作系统交互的UI聚焦代理
人工智能咨询培训老师叶梓 转载标明出处 人机交互的便捷性和效率直接影响着我们的工作和生活质量。尽管现代操作系统如Windows提供了丰富的图形用户界面(GUI),使得用户能够通过视觉和简单的点击操作来控制计算机,但随着应用程序功…...
scp免密复制文件
实现在服务器A和服务器B之间使用scp命令免密互相传输文件 1. 在服务器A中免密复制到服务器B 1.1 生成服务器A的公钥私钥 #在服务器A中执行 ssh-keygen -t rsa -P ""命令执行完毕会在服务器A的 ~/.ssh 目录下生成两个文件:id_rsa 和 id_rsa.pub 1.2 拷…...
Maven 的模块化开发示例
Maven 的模块化开发是一种非常有效的软件开发方式,它允许你将一个大型的项目分割成多个更小、更易于管理的模块(modules)。每个模块都可以独立地构建、测试和运行,这不仅提高了开发效率,也便于团队协作和项目的维护。以…...
通过QT进行服务器和客户端之间的网络通信
客户端 client.pro #------------------------------------------------- # # Project created by QtCreator 2024-07-02T14:11:20 # #-------------------------------------------------QT core gui network #网络通信greaterThan(QT_MAJOR_VERSION, 4): QT widg…...
【STM32 HAL库】DMA+串口
DMA 直接存储器访问 DMA传输,将数据从一个地址空间复制到另一个地址空间。-----“数据搬运工”。 DMA传输无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场,它是通过硬件为RAM和IO设备开辟一条直接传输数据的通道,…...
C#类型基础Part2-对象判等
C#类型基础Part2-对象判等 参考资料引用类型判等简单值类型判等复杂值类型判等 参考资料 《.NET之美-.NET关键技术深入解析》 引用类型判等 先定义两个类型,它们代表直线上的一个点,一个是引用类型class,一个是值类型struct public class…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
