#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h> #define BUF_SIZE 1024
void error_handling(char* message); int main(int argc, char* argv[])
{
WSADATA wsadata;
SOCKET hServSock, hClntSock;
SOCKADDR_IN servAddr, clntAddr;
TIMEVAL timeout;
fd_set reads, cp_reads; int adr_sz;
int str_len, i,fd_num;
char buf[BUF_SIZE]; if (argc != )
{
printf("usage:%s <port>\n",argv[]);
exit();
}
if (WSAStartup(MAKEWORD(, ), &wsadata) != )
error_handling("WSAStartup error"); hServSock = socket(PF_INET, SOCK_STREAM, );
memset(&servAddr, , sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(atoi(argv[])); if (bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)
error_handling("bind error");
if (listen(hServSock, ) == SOCKET_ERROR)
error_handling("listen error"); FD_ZERO(&reads);
FD_SET(hServSock, &reads); while ()
{
cp_reads = reads;
timeout.tv_sec = ; if ((fd_num = select(, &cp_reads, , , &timeout)) == SOCKET_ERROR)
break;
if (fd_num == )
continue; for (i = ;i < reads.fd_count;i++)
{
if (FD_ISSET(reads.fd_array[i], &cp_reads))
{
if (reads.fd_array[i] == hServSock)
{
adr_sz = sizeof(clntAddr);
hClntSock = accept(hServSock, (SOCKADDR*)&servAddr, &adr_sz);
FD_SET(hClntSock, &reads);
printf("connected client:%d\n", hClntSock);
}
else
{
str_len = recv(reads.fd_array[i], buf, BUF_SIZE - , );
if (str_len == )
{
FD_CLR(reads.fd_array[i], &reads);
closesocket(cp_reads.fd_array[i]);
printf("closed client:%d\n", cp_reads.fd_array[i]);
}
else
send(reads.fd_array[i], buf, str_len, );
}
}
}
}
closesocket(hServSock);
WSACleanup();
return ;
} void error_handling(char* message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit();
}

socket学习笔记——select函数的使用(windows)的更多相关文章

  1. socket学习笔记——select与epoll函数的使用(linux)

    select.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <u ...

  2. socket学习笔记——实现收发文件(Windows)

    记录下来,供自己学习! server.c #define _CRT_SECURE_NO_DEPRECATE #include <stdio.h> #include <stdlib.h ...

  3. Matlab学习笔记 figure函数

    Matlab学习笔记 figure函数 matlab中的 figure 命令,能够创建一个用来显示图形输出的一个窗口对象.每一个这样的窗口都有一些属性,例如窗口的尺寸.位置,等等.下面一一介绍它们. ...

  4. matlab学习笔记 bsxfun函数

    matlab学习笔记 bsxfun函数 最近总是遇到 bsxfun这个函数,前几次因为无关紧要只是大概看了一下函数体去对比结果,今天再一次遇见了这个函数,想想还是有必要掌握的,遂查了些资料总结如下. ...

  5. cocos2d-x学习笔记(18)--游戏打包(windows平台)

    cocos2d-x学习笔记(18)--游戏打包(windows平台)           之前做好的游戏,都是在vs2008下编译执行的.假设说想把游戏公布到网上或者和其它人一起分享游戏,那就得对游戏 ...

  6. matlab学习笔记13_1 函数返回值

    一起来学matlab-matlab学习笔记13函数 13_1 函数返回值 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 https://blog.csdn.net/qq_36556 ...

  7. socket通信中select函数的使用和解释

    select函数的作用: select()在SOCKET编程中还是比较重要的,可是对于初学SOCKET的人来说都不太爱用select()写程序,他们只是习惯写诸如 conncet().accept() ...

  8. react-native学习笔记--史上最详细Windows版本搭建安装React Native环境配置

    参考:http://www.lcode.org/react-native/ React native中文网:http://reactnative.cn/docs/0.23/android-setup. ...

  9. swift学习笔记2——函数、闭包

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

随机推荐

  1. ASP.NET网页验证码常用方法

    验证码生产类 using System; using System.Data; using System.Configuration; using System.Web; using System.W ...

  2. 206. Reverse Linked List

    反转链表 注意是借用  假的头节点,这样算法判断开始和结束,就好很多了. 借用头插法. []dummy/head [] [] [] [] head  curr ==== class Solution ...

  3. MVC:上传文件

    今天写了一个使用MVC上传的DEMO,很简单不超过10行代码.代码如下(关注重点,所以尽量精简掉其他代码): 项目结构

  4. $.getJSON 返回值、AJAX异步调用步骤

    //首先要判断用户录入的手机号是不是中国移动的,不是直接给出提示,并终止登录 if($("#cmUsername1").val().isMobile())//手机号码 { jQue ...

  5. 从视频文件中读入数据-->将数据转换为灰度图-->对图像做canny边缘检测-->将这三个结构显示在一个图像中

    //从视频文件中读入数据-->将数据转换为灰度图-->对图像做canny边缘检测-->将这三个结构显示在一个图像中 //作者:sandy //时间:2015-10-10 #inclu ...

  6. 深入ThreadLocal之三(ThreadLocal可能引起的内存泄露)

    threadlocal里面使用了一个存在弱引用的map,当释放掉threadlocal的强引用以后,map里面的value却没有被回收.而这块value永远不会被访问到了. 所以存在着内存泄露. 最好 ...

  7. Mac 终端常用命令备忘

    Tab 补全 pwd 显示路径 一 .ls ls -lh   查看当前路径详细文件 ls ..     返回上级目录 ls -a   显示隐藏文件 ls -a -l 以详细列表显示 ls ../../ ...

  8. jsLint配置参数解释

    转自: http://www.cnblogs.com/elementstorm/archive/2013/04/10/3012679.htmlanon :true //匿名函数声明中function关 ...

  9. orientationchange不管用啊

    首先引入JQuery Mobile包,将 <script> //手持设备方向改变时执行 $(window).bind( 'orientationchange', function(e){ ...

  10. C++primer 练习11.33:实现你自己版本的单词转换程序

    // 11_33.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...