网络与线程编程(第八节:查询机制)
来源:互联网 发布:360手机代工厂 知乎 编辑:程序博客网 时间:2024/06/07 16:54
select是一个函数,用于向OS查询。OS_socket类做了一个简单的封装,用于查询Socket是否可以读写。
实例:
Client:
#include <stdio.h>#include <string.h>#include "osapi/osapi.h"#include "Endian.h"int main(){ // 打开Socket OS_TcpSocket client_sock; client_sock.Open(); // 连接服务器 OS_SockAddr serv_addr("127.0.0.1", 9555); if( client_sock.Connect( serv_addr ) < 0) { printf("无法连接服务器!\n"); return -1; } char buf[1024]; int n; // 发送请求 strcpy(buf, "help me"); n = strlen(buf); client_sock.Send(buf, n); // select printf("wait...\n"); int ret = client_sock.Select_ForReading(6000);//大于0可以读,等于0则超时,-1则失败。 printf("ret: %d \n", ret); // 接受应答 n = client_sock.Recv(buf, sizeof(buf)); buf[n] = 0; printf("Got: %s \n", buf); getchar(); // 关闭Socket client_sock.Close(); return 0;}
Server:
int TcpConn::Routine(){ // 为client提供服务 unsigned char buf[1024]; int n ; // 接收客户的请求 n = m_WorkSock.Recv(buf, 1023); buf[n]=0; printf("客户请求: %s \n", buf); OS_Thread::Msleep(5000);//等待5秒,然后发送响应。 // 应答客户 m_WorkSock.Send("yes", 3); // 关闭socket m_WorkSock.Close(); return 0;}
int select_ForReading(int timeout);//传递超时参数
同理:int select_ForWriting(int timeout);
能够查询那些可以读,哪些可以写。
select用途:如果服务器同时与大量客户端进行交互,可以用select查询机制查询哪些select有上来的数据,当有数据时,才做响应。这样可以避免为每个client创建线程。
0 0
- 网络与线程编程(第八节:查询机制)
- 第十八节网络编程
- 线程与网络编程(第五节:UDP的扩展与双工通信)
- 第八节 内存分配与内存释放
- Akka并发编程——第八节:Actor模型(七)
- Akka并发编程——第八节:Actor模型(七)
- java第八节课堂笔记(字符串)
- linux网络编程学习笔记之五 -----并发机制与线程池
- 网络与线程编程(第七节:TCP与数据包)
- Spark修炼之道(基础篇)——Linux大数据开发基础:第八节:网络管理
- Spark修炼之道(基础篇)——Linux大数据开发基础:第八节:网络管理
- 第八节:Maven搭建Nexus私服与权限管理
- 第八节:触发器
- php学习 第八节
- java第八节笔记
- pgsql 第八节 数据类型
- 第八节 linux文件系统
- 第八节linux文件系统
- 解决错误java compiler level does not match the version of the installed java project facet
- 剑指offer(30)-丑数
- position:relative absolute
- msyql 5.7 group by
- Binder学习资料整理
- 网络与线程编程(第八节:查询机制)
- setNeedsDisplay和setNeedsLayout
- Oracle树查询及函数
- 关于fragmentPagerAdapter的冲突问题
- 查看bundleId和info.plist文件内容
- 每日一命令(10)cat (concatenate files and print on the standard output)
- hibernate 调用存储过程
- Subline Text 3注册码
- VB.net学习笔记(三十)认识线程池