Select模型

2024-09-05 03:04
文章标签 模型 select

本文主要是介绍Select模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

服务端:

#include <iostream>
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <windows.h>int main()
{WSADATA lpWSAData;WSAStartup(MAKEWORD(2, 2), &lpWSAData);SOCKADDR_IN saddr{ 0 };saddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");saddr.sin_family = AF_INET;saddr.sin_port = htons(50123);SOCKET SerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);bind(SerSocket, (PSOCKADDR)&saddr, sizeof(saddr));listen(SerSocket, SOMAXCONN);fd_set all_Sockets{ 0 };FD_SET(SerSocket, &all_Sockets);while (true){fd_set fdRead = all_Sockets;int sRet = select(NULL, &fdRead, NULL, NULL, NULL);if (sRet > 0){for (size_t i = 0; i < all_Sockets.fd_count; i++){if (FD_ISSET(all_Sockets.fd_array[i], &fdRead)){if (fdRead.fd_array[i] == SerSocket){if (fdRead.fd_count < FD_SETSIZE){SOCKADDR_IN temp{ 0 };int length = sizeof(SOCKADDR_IN);SOCKET NewSocket = accept(SerSocket, (PSOCKADDR)&temp, &length);FD_SET(NewSocket, &all_Sockets);printf("IP:%s\t", inet_ntoa(temp.sin_addr));char buff[MAXBYTE]{ 0 };sprintf(buff, "%d", ntohs(temp.sin_port));printf("Port:%s\n",buff);}else{printf("Clients too much!");}}else{char buffer[0x500]{0};sRet = recv(fdRead.fd_array[i], buffer, sizeof(buffer), 0);if (sRet > 0){std::cout << buffer << std::endl;}else{closesocket(fdRead.fd_array[i]);FD_CLR(fdRead.fd_array[i], &all_Sockets);}}}}}}shutdown(SerSocket, SD_BOTH);WSACleanup();system("pause");return 0;
}

客户端:

#include <iostream>
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <windows.h>int main()
{WSADATA lpWSAData;WSAStartup(MAKEWORD(2, 2), &lpWSAData);SOCKADDR_IN caddr{ 0 };caddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");caddr.sin_family = AF_INET;caddr.sin_port = htons(50123);SOCKET CliSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);int iMode = 1;ioctlsocket(CliSocket, FIONBIO, (u_long*)&iMode);while (true){int Ret = connect(CliSocket, (PSOCKADDR)&caddr, sizeof(caddr));if (Ret == SOCKET_ERROR){int nError = WSAGetLastError();if (nError == WSAEWOULDBLOCK || nError == WSAEINVAL){Sleep(1);printf("check connect!\r\n");continue;}else if (nError == WSAEISCONN){break;}else{printf("connect failed!\r\n");closesocket(CliSocket);WSACleanup();return 0;}}}while (true){printf("\r\ninput you send buffer:\r\n");char str[256]{ 0 };std::cin >> str;while (true){int Ret = send(CliSocket, str, strlen(str), 0);if (Ret == SOCKET_ERROR){int nError = WSAGetLastError();if (nError == WSAEWOULDBLOCK){Sleep(1);continue;}else{printf("send failed!\r\n");closesocket(CliSocket);WSACleanup();return 0;}}break;}}system("pause");return 0;
}

这篇关于Select模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137789

相关文章

Java领域模型示例详解

《Java领域模型示例详解》本文介绍了Java领域模型(POJO/Entity/VO/DTO/BO)的定义、用途和区别,强调了它们在不同场景下的角色和使用场景,文章还通过一个流程示例展示了各模型如何协... 目录Java领域模型(POJO / Entity / VO/ DTO / BO)一、为什么需要领域模

深入理解Redis线程模型的原理及使用

《深入理解Redis线程模型的原理及使用》Redis的线程模型整体还是多线程的,只是后台执行指令的核心线程是单线程的,整个线程模型可以理解为还是以单线程为主,基于这种单线程为主的线程模型,不同客户端的... 目录1 Redis是单线程www.chinasem.cn还是多线程2 Redis如何保证指令原子性2.

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

Go中select多路复用的实现示例

《Go中select多路复用的实现示例》Go的select用于多通道通信,实现多路复用,支持随机选择、超时控制及非阻塞操作,建议合理使用以避免协程泄漏和死循环,感兴趣的可以了解一下... 目录一、什么是select基本语法:二、select 使用示例示例1:监听多个通道输入三、select的特性四、使用se

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA