#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. Windows2012 cannot access netapp CIFS share

    NAS1> options cifs.smb2.signing.requiredcifs.smb2.signing.required off NAS1> options cifs.smb2 ...

  2. python正则表达式的学习记录

    match和findall的区别以及有括号和无括号的区别 strvar = "hello\n\nworld" find_re = re.compile("hello[.| ...

  3. 【freemaker】之Unknown built-in variable: now

    Caused by: freemarker.core.ParseException: Unknown built-in variable: now 意思是没有内置变量,看了一下源码2.3.15版本fr ...

  4. Python 正则表达式-OK

    Python正则表达式入门 一. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分. 正则表达式是用于处理字符串的强大工具, 拥有自己独特的语法以及一个独立的处理引擎, 效率上 ...

  5. VB脚本调用exe应用程序并传递参数

    VB脚本调用应用程序,并传递参数给exe应用程序: Private Sub CommandButton1_Click() Dim a a = Shell("D:\\ExperimentLin ...

  6. 黄聪:wordpress自定义post_type,并且自定义固定链接

    <? class zsjh { function init() { add_action( 'init', array($this,'create_zsjh') ); add_filter('p ...

  7. SDS查看部署在集成TOMCAT服务器中的项目目录结构

  8. 单选按钮选中js的处理

    function FinancialinfosetController($scope, $http, $timeout, $location, $rootScope, $routeParams) { ...

  9. 两分钟彻底让你明白Android Activity生命周期(图文)!

    大家好,今天给大家详解一下Android中Activity的生命周期,我在前面也曾经讲过这方面的内容,但是像网上大多数文章一样,基本都是翻译Android API,过于笼统,相信大家看了,会有一点点的 ...

  10. C# STUDY

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...