使用select的TCP服务器

2023-05-16

select函数详解

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <iostream>
#include<sys/select.h>
#include<sys/epoll.h>
#include <fcntl.h>
#include <errno.h>
using namespace std;

#define MAX_EVENTS 1024
#define READ_BUFFER 1024

int setnonblocking(int fd)
{
  fcntl(fd,F_SETFL,fcntl(fd,F_GETFL) | O_NONBLOCK);
}

int main()
{

int sockfd;//服务器端套接字
sockfd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//创建服务器端套接字

sockaddr_in serveraddr = {};服务器网络地址结构体
serveraddr.sin_family = AF_INET;//设置为IP通信
serveraddr.sin_port =htons(1234);//服务器端口号
serveraddr.sin_addr.s_addr = INADDR_ANY;//服务器IP地址
//serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");//服务器IP地址

 /*将套接字绑定到服务器的网络地址上*/
bind(sockfd,(sockaddr*)&serveraddr,sizeof(serveraddr));

 /*监听连接请求*/
listen(sockfd,SOMAXCONN);

socklen_t  clnt_addr_len = sizeof(serveraddr);
fd_set r_set;
  
FD_ZERO(&r_set);

sockaddr_in clientaddr;
socklen_t naddrlen;
naddrlen = sizeof(sockaddr_in);
int _csock;
int maxfd = _csock; 


 /*等待客户端连接请求到达*/
_csock = accept(sockfd,(sockaddr*)&clientaddr,&naddrlen);
while (1)
 {
FD_SET(_csock,&r_set);
FD_SET(0,&r_set);
 int nready;
 nready = select(maxfd+1,&r_set,NULL,NULL,NULL);

 if(nready){ 


 //接收数据
 if (FD_ISSET(_csock,&r_set))
 {
  char revdate[255] = {0};
  int ret = recv(_csock,revdate,256,0);
  cout<<"收到服务端信息:"<<revdate<<endl;


  }
 
//发送数据
if (FD_ISSET(0,&r_set))
{
char sw[30];
cin>>sw;
cin.clear();
cin.sync();
send(_csock,sw,strlen(sw),0);


 }
 
}
 }
}

client客户端

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#include<unistd.h>
#include <iostream>
#include <sys/un.h>
#include <arpa/inet.h>
#include<fstream>
using namespace std;
 
int main()
{



int socketclient;
socketclient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

 sockaddr_in clientaddr = {};
clientaddr.sin_family = AF_INET;
clientaddr.sin_port = htons(4444);
clientaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(socketclient,(sockaddr*)&clientaddr,sizeof(sockaddr_in));


 fd_set r_set;
 int maxfd = socketclient;
 FD_ZERO(&r_set);


while (1)
{
FD_SET(socketclient,&r_set);
FD_SET(0,&r_set);
int nready;
nready = select(maxfd+1,&r_set,NULL,NULL,NULL);

if(nready)
{

if(FD_ISSET(0,&r_set)){
 
char sw[30];
cin>>sw;
cin.clear();
cin.sync();
send(socketclient,sw,strlen(sw),0);
}
if (FD_ISSET(socketclient,&r_set))
{

char recvbuf[1024] = {0};
int nlen = recv(socketclient,recvbuf,1024,0);
cout<<recvbuf<<endl;

}

}
}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用select的TCP服务器 的相关文章

  • 如何在NodeJS中测试socket.setKeepAlive

    我尝试在NodeJS中测试setKeepAlive 的功能 我在同一本地网络中的不同计算机上运行 Server js 和 client js 然后 我关闭了客户端计算机上的 WiFi 连接 断开互联网连接 15分钟后 仍然没有消息抛出 这是
  • Web 服务器可以处理多少个套接字连接?

    假设我要获得共享 虚拟或专用托管 我在某处读到服务器 计算机一次只能处理 64 000 个 TCP 连接 这是真的吗 无论带宽如何 任何类型的托管可以处理多少个 我假设 HTTP 通过 TCP 工作 这是否意味着只有 64 000 个用户可
  • 为什么 peewee 将“id”列包含到 mysql select 查询中?

    我正在尝试学习如何将 peewee 与 mysql 一起使用 我在 mysql 服务器上有一个现有数据库和一个现有表 该表当前为空 我现在正在测试 gt gt gt db MySQLDatabase nhl user root passwd
  • PHP 上的多个 TCP 套接字请求

    是否可以使用 PHP 上的套接字服务器接受多个请求 并行 如果可以的话 怎样做 普通的 PHP 脚本无法接收多个请求 但如果你真的计划创建一个套接字服务器 作为 cmdline php 脚本启动 那么是的 这是可能的 调查http pear
  • Linux环境下串口数据转换为TCP/IP

    我需要从Linux系统的串口获取数据并将其转换为TCP IP发送到服务器 这很难做到吗 我有一些基本的编程经验 但对 Linux 的经验不多 有没有开源应用程序可以做到这一点 在 Linux 中您不需要编写程序来执行此操作 只是pipe h
  • 在 Python 中通过 TCP 套接字发送文件

    我已经成功地将文件内容 图像 复制到新文件 然而 当我通过 TCP 套接字尝试同样的事情时 我遇到了问题 服务器循环未退出 客户端循环在到达 EOF 时退出 但服务器无法识别 EOF 这是代码 Server import socket Im
  • SQL select通常是如何实现的

    我有两节课 class PopulationMember public void operationOnThisMember1 void operationOnThisMember2 private Population populalti
  • C# Socket.receive连续接收0字节且循环中不阻塞

    我正在尝试用 C 编写一个最简单的多线程 TCP 服务器 它接收来自多个客户端的数据 每次连接新客户端时 都会建立套接字连接 并将套接字作为参数传递给新类函数 之后运行 while 循环并接收数据 直到客户端连接为止 这里的问题是 sock
  • 更改 AS3 中的 TextField 选择颜色

    如何更改 ActionScript 3 中 TextField 的选择 突出显示 颜色 我有一个输入文本字段 黑色背景上有白色文本 因此 选择是不可见的 这对于可用性来说非常糟糕 谢谢 另一种方法是使用文本布局框架 特别是使用 Select
  • 视频流上的 TCP 与 UDP

    我刚从网络编程考试回来 他们问我们的问题之一是 如果您要传输视频 您会使用 TCP 还是 UDP 请解释一下存储视频和实时视频流 对于这个问题 他们只是希望得到一个简短的答案 TCP 用于存储视频 UDP 用于实时视频 但我在回家的路上想到
  • 如何解决postgresql中group by和聚合函数的问题

    我正在尝试编写一个查询来划分两个 SQL 语句 但它显示了我 ERROR column temp missed must appear in the GROUP BY clause or be used in an aggregate fu
  • 如何向 addrange select 语句添加异步“await”?

    我有一个这样的函数 public async Task
  • 简单的跨平台 TCP IP API?

    我不打算使用像 QT 或 wxWidgets 的 API 这样的大东西 我只想要可以在 Android iOS Windows Mac Linux 上运行的简单套接字 我正在制作一个事件驱动的纸牌游戏 所以 TCP 是最好的 本质上 我只想
  • 为什么 UDP 服务器中只有一个套接字?

    我正在准备考试 发现了这个问题 典型的 UDP 服务器可以使用单个套接字来实现 解释一下为什么 对于 TCP 驱动的服务器 我发现创建了两个套接字 一个用于所有客户端访问服务器 另一个用于每个客户端的特定 套接字 用于服务器和客户端之间的进
  • 在 JavaFX 中搜索 TableView 列表

    如何在 TableWie 中查找记录 例如通过 ID 并选择创建的行并将其放在 Java 8 JavaFX 中的屏幕中间 您可以使用以下方式搜索元素 int searchId table getItems stream filter ite
  • 触发“对等方重置连接”

    我想测试当发生 对等方重置连接 错误时我们的应用程序 嵌入式 ftp 服务器 中发生的日志记录 这个帖子 https stackoverflow com questions 1434451 connection reset by peer很
  • 每行中非空列的计数

    我有一个包含 4 列的表 在第 5 列中我想存储前 4 列中有多少个非空列的计数 例如 其中 X 是任意值 Column1 Column2 Column3 Column4 Count X X NULL X 3 NULL NULL X X 2
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 何时在 mysql 中使用 Union [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对于 Union 您会在什么现实情况下使用它 因为对我来说 对具有不同列用途 含义的两个表中的两个选择查询使用联合是没有意义的 例如
  • jquery-traversing:选择 -> 选项 -> 文本

    我想将变量与选择 gt 选项 gt 选择的文本进行比较 以更改 选定 属性 这是我的代码 它有效 但我认为这不是最好的编写方式 请原谅我的英语 我使用谷歌翻译寻求帮助嘿嘿嘿 var lista example 1 id option eac

随机推荐

  • Makefile以及CMakelists的编辑

    1 概念 在linux中不像windows和mac有图形界面 xff0c 怎么快速的用命令行运行大型项目成为一个问题 xff0c 并且像c c 43 43 需要自己添加include文件的位置 xff0c 当文件数目变多的时候 xff0c
  • python爬虫练习1:计算评分平均值

    练习要求 xff1a 抽取某本书的前50条短评内容并计算评分的平均值 提示 xff1a 有的评论中并不包含评分 代码 xff1a span class token comment coding utf 8 span span class t
  • python爬虫练习2:取道指成分股数据

    练习要求 xff1a 在 http money cnn com data dow30 上抓取道指成分股数据并将30家公司的代码 公司名称和最近一次成交价放到一个列表中输出 代码 xff1a span class token comment
  • python中sort函数的使用

    转自https blog csdn net lyy14011305 article details 76148512 我们需要对List进行排序 xff0c Python提供了两个方法 对给定的List L进行排序 xff0c 方法1 用L
  • Python序列与文件编程练习

    练习一 xff1a 使用以下语句存储一个字符串 xff1a string 61 My moral standing is 0 98765 将其中的数字字符串转换成浮点数并输出 代码 xff1a span class token commen
  • 简单平台用户信息管理系统

    要求 xff1a 用字典创建一个平台的用户信息 xff08 包含用户名和密码 xff09 管理系统 xff0c 新用户可以用与现有系统帐号不冲突的用户名创建帐号 xff0c 已存在的老用户则可以用用户名和密码登陆重返系统 实现代码 xff1
  • DataFrame小练习

    练习要求 xff1a 已知有一个列表中存放了一组音乐数据 xff1a music data 61 the rolling stones Satisfaction Beatles Let It Be Guns N Roses Don t Cr
  • nenuacm 2019 新生训练#10 字符串处理 题解

    题目链接 Ultra Fast Mathematician 解题思路 xff1a 题目说辣么多 xff0c 其实就是将两个二进制进行异或运算 xff1a 相同位上的数字相同 xff0c 异或结果为0 xff0c 否则为1 AC代码 span
  • 比较两个字符串大小(C语言)

    比较两个字符串的大小 比较两个字符串的大小 xff0c 不许使用strcmp函数 输入格式 在两行分别输入两个长度小于20的字符串 在字符串中不要出现换行符 xff0c 空格 xff0c 制表符 输出格式 直接输出 gt 或 lt 或 61
  • 海康web3.0使用记录

    项目中集成海康web3 0控制摄像头 近期项目中的业务需求涉及播放控制实时监控 xff0c 采用了海康web3 0的开发包 xff0c 开发包规范是32位IE11浏览器 xff0c 业务前期本来只是播放rtsp流的监控 xff0c 所以采取
  • 字符串与数字范围

    当字符串由数字组成时 xff0c 告诉你字符串的长度是length xff0c 意味着变成数字时最大会达到10length 1 比如告诉字符串长度最长为105 xff0c 那要注意数字可以达到10的105 1次方 xff0c 大约是1010
  • 如何在VS2019上配置OpenCV

    目录 前言正文1 安装Visual Studio2017 20192 配置 OpenCV https so csdn net so search q 61 OpenCV amp spm 61 1001 2101 3001 7020 2 1
  • GCC编译与Makefile基本语法

    写在最前面 xff1a 所有的博文都是为了若干年月以后当我再次翻看可以快速回想起之前的零星知识 学海无涯 xff0c 在看这篇文章的未来的你 xff0c 加油吧 xff01 目录 一 Makefile简介 二 Linux环境下的C语言编译过
  • CMake与CMakeLists是干什么的?

    写在最前面 xff1a 所有的博文都是为了若干年月以后当我再次翻看可以快速回想起之前的零星知识 学海无涯 xff0c 在看这篇文章的未来的你 xff0c 加油吧 xff01 因为之前看到有些软件中使用了CMake xff0c 不太理解为什么
  • 解决vscode智能代码提示快捷键 Ctrl+Space 无效的问题

    背景 vscode 智能代码提示除了输入时通过字符触发 xff0c 还能使用快捷键ctrl 43 space触发 xff0c 但是在 Windows 下会发现没有效果 因为这个快捷键在Windows下是系统的中文 简体 输入法 输入法 非输
  • Ubuntu系统安装、并解决Ubuntu系统网络连接激活失败问题

    Ubuntu系统安装 并解决Ubuntu系统网络连接激活失败问题 前言 1 Ubuntu安装过程中要保证网络连接稳定 2 Ubuntu安装过程要保证U盘不离开插槽 3 第一次安装请先浏览整个过程 xff0c 再进行操作 4 卸载Ubuntu
  • 激光雷达运动畸变去除方法

    文章目录 一 激光雷达运动畸变产生的原因二 为什么需要解决这个问题 xff1f 三 去除运动畸变的原理四 运动去畸变的方法1 纯估计方法 xff08 ICP VICP xff09 2 传感器辅助的方法 xff08 odom xff0c IM
  • curl下载文件的命令

    curl文件下载 curl将下载文件输出到stdout xff0c 将进度信息输出到stderr xff0c 不显示进度信息使用 silent 选项 1 curl URL silent 这条命令是将下载文件输出到终端 xff0c 所有下载的
  • 倍福ADS通讯(一)——ADS通讯简介

    ADS通讯简介 xff08 一 xff09 简介 xff08 二 xff09 ADS通讯协议概述 xff08 三 xff09 ADS通讯协议的设备标识 xff08 四 xff09 使用TwinCAT Ads中间件 xff08 一 xff09
  • 使用select的TCP服务器

    select函数详解 span class token macro property span class token directive hash span span class token directive keyword inclu