网络与线程编程(第八节:查询机制)

来源:互联网 发布: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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝睡觉枕头湿怎么办 一个多月的小宝宝便秘怎么办 小宝宝便秘拉屎困难怎么办 一岁小宝宝便秘怎么办 客户不听我说话怎么办 微信上客户不理怎么办 小宝宝母乳不够吃怎么办 小宝宝吃母乳拉肚子怎么办 母乳小宝宝吃奶吃不了怎么办 婴儿感冒吐奶怎么办 小孩感冒吐奶怎么办 小孩吐奶怎么办月子 新生儿一直吐奶怎么办 宝宝50天吐奶厉害怎么办 小儿吐奶厉害怎么办 宝宝一直便秘了怎么办 误建了微信群聊怎么办 新生儿大口吐奶怎么办 宝宝喝了就吐奶怎么办 婴儿顿顿吐奶怎么办 说话着急就结巴怎么办 幼儿舌头长泡怎么办 一着急说话结巴怎么办 幼儿舌头又溃疡怎么办 3儿童说话结巴怎么办 孩子小舌头短怎么办? 6岁讲话不清楚怎么办 三岁宝宝结巴怎么办 新生儿儿有舌苔怎么办 严重口吃的孩子怎么办 口吃越来越严重了怎么办 三岁幼儿口吃怎么办 3岁幼儿口吃怎么办 三岁小儿口吃怎么办 高中孩子突然口吃怎么办 小孩看见脏东西怎么办 3岁宝宝口吃怎么办? 孩子zcs发音咬舌怎么办 孩子发音ln不分怎么办 宝宝刚说话磕巴怎么办 小孩子吃东西噎到了怎么办