慢慢修改:

#include <winsock.h>
#include <stdio.h> #include <string> #define PORT 5010
#define MSGSIZE 1024
int BytesSum = ; #pragma comment(lib, "ws2_32.lib") DWORD WINAPI WorkerThread(LPVOID lpParameter); void InitWinSocket()
{
WSADATA wsaData;
WSAStartup(0x0202, &wsaData);
} #define ListenQ 10 int main()
{
InitWinSocket(); SOCKET lListenFD, lClientSocket[FD_SetSize]; lListenFD = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); SOCKADDR_IN local, client; // Bind
local.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
local.sin_family = AF_INET;
local.sin_port = htons(PORT); bind(lListenFD, (struct sockaddr *)&local, sizeof(SOCKADDR_IN)); // Listen
listen(lListenFD, ListenQ); int lTotalConn = ;
SOCKET lCliSocketArr[FD_SETSIZE];
for (int i = ; i < FD_SETSIZE; ++i)
{
lCliSocketArr[i] = -;
} int lMaxFD = lListenFD;
int lMaxClientSocketIndex = -; fd_set lAllSet;
fd_set lReadySet;
FD_ZERO(lAllSet);
FD_SET(lListenFD, lAllSet); struct timeval tv = {, }; fd_set fdread;
char szMessage[MSGSIZE];
FD_ZERO(fdread); while (TRUE)
{
lReadySet = lAllSet;
SOCKET lClient = select(lListenFD,lReadySet,NULL,NULL,&tv); if (FD_ISSET(lListenFD, lReadySet))
{
int lAddrSize = sizeof(client);
lClientSocket = accept(lMaxFD+, (sockaddr*)&client, &lAddrSize);
printf("Accepted client:%s:%d\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port)); // Add socket to g_CliSocketArr
for (int i = ; i < FD_SETSIZE; ++i)
{
if (lCliSocketArr[i] < )
{
lCliSocketArr[i] = lClientSocket;
break;
}
}
if (i == FD_SETSIZE)
{
printf("too many client/n");
}
if (lClientSocket > lMaxFD)
{
lMaxFD = lClientSocket;
}
} int ret = select(, &fdread, NULL, NULL, &tv);//检测是否有数据可读 if (ret == )
{
// Time expired
continue;
} for (i = ; i < g_iTotalConn; i++)
{
memset(szMessage,,MSGSIZE);
if (FD_ISSET(g_CliSocketArr[i], &fdread))
{
// A read event happened on g_CliSocketArr
ret = recv(g_CliSocketArr[i], szMessage, MSGSIZE, );
if (ret == || (ret == SOCKET_ERROR && WSAGetLastError() == WSAECONNRESET))
{//处理发生错误的时候
// Client socket closed
printf("Client socket %d closed.\n", g_CliSocketArr);
closesocket(g_CliSocketArr[i]);
if (i < g_iTotalConn - )
{
g_CliSocketArr[i--] = g_CliSocketArr[--g_iTotalConn];
}
}
else
{
szMessage[ret] = '\0';
printf("BytesSum(%d) read Data:%s\n",BytesSum, szMessage);
//send(g_CliSocketArr[i], szMessage, ret, 0);
}
}
} } return ;
}

修改的select的更多相关文章

  1. 修改默认select样式

    <style type="text/css"> .select_demo,.select_list { width: 400px; height: 60px; } .s ...

  2. 弹窗中修改select默认值遇到的问题

    弹窗中修改select默认值无效 前提: 项目中遇到一个需求, 在一个弹窗中,有很多个select都是在打开弹窗的同时由js自动生成的(每次打开都自动重新生成一遍). 弹窗打开后,从每个select的 ...

  3. 为select 设置样式

    问题: 在为表单添加下拉菜单时,有时候对菜单的样式没有特别的要求,就是需要修改下select元素的宽度和高度,但众所周知select元素的样式很难修改: select在各个浏览器,字体大小为14px时 ...

  4. MySQL修改root账号密码

    MySQL数据库中如何修改root用户的密码呢?下面总结了修改root用户密码的一些方法   1: 使用set password语句修改 mysql> select user(); +----- ...

  5. SQL SELECT语句

    基本SQL SELECT语句   1.       下面的语句是否可以执行成功 select ename , job , sal as salary  from emp; 2.       下面的语句 ...

  6. 修改Oracle 表空间名称 tablespace name

    修改表空间名称步骤如下: 1. 使用oracle用户登录执行 $sqlplus / as sysdba 2. 执行修改表空间命令如下 SQL> alter tablespace  TEST re ...

  7. html自定义checkbox、radio、select —— select篇

    上一篇<html自定义checkbox.radio.select —— checkbox.radio篇>介绍了我们是怎么将 html 自带的 checkbox.radio 改成我们自定义的 ...

  8. MySQL查看数据库大小、表大小和最后修改时间

    查看数据库表基本信息. select * from information_schema.TABLES where information_schema.TABLES.TABLE_SCHEMA = ' ...

  9. 数据库————Select 查询

    --创建mydb数据库create database mydb go --使用数据库use mydb go --水果表 create table Fruit ( Ids varchar() prima ...

随机推荐

  1. 解决使用Properties读取中文乱码问题

    web服务返回的是多行以key和value对应的键值对,且编码为utf-8.我的项目使用的编码也是utf-8,但是我用Properties读取中文的时候,打印出来的总是乱码. 后来网上查了一下,得到如 ...

  2. centos7 tomcat9

    1.下载 下载 apache-tomcat-9.0.0.M4.tar.gz 文件:  wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0 ...

  3. Idea 自动导入包的*设置99

    作者:Intopass 链接:https://www.zhihu.com/question/35806024/answer/64530300 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权, ...

  4. 【Kafka】Kafka-副本-分区设置-性能调优

    Kafka-副本-分区设置-性能调优 SparkKafkaDemo - Executors kafka replication 负载均衡_百度搜索 Kafka 高性能吞吐揭秘 - 友盟博客 - Seg ...

  5. 判断checkbox选中的个数

    直接看例子吧: shippingAddressList  为一个集合 <c:forEach items="${shippingAddressList }" var=" ...

  6. Esxi 6.0虚拟机迁移Linux遇到网络配置错误

    在使用vmware迁移linux系统过程中(迁移方式是导出OVF模板和部署OVF模板),发现部署后的linux系统无法启动网卡 报错为 Bringing up interface eth0: Devi ...

  7. 解决电脑上PPT频繁刷新的问题

    操作步骤: 桌面鼠标右击--->屏幕分辨率-----> 高级设置 ----->监视器----->颜色----->选择:增强色(16位)--->确定完成

  8. MySQL老是提示视图没有主键

    写了一个视图,每次打开都提示没有主键.我又不想更新视图,根本不关心这个,但每次都提示,很烦. 网上找到解决办法,就是关闭提示: Windows 和 Linux:选择工具 > 选项,并在外观 &g ...

  9. Intellij IDEA 配置Subversion插件时效解决方法

    在使用Intellij的过程中,突然发现svn不起效了,在VCS–>Checkout from Version Control中也未发现Subversion这一项.如下图: 一.原因查找 经过分 ...

  10. SpringBoot 启动错误搜集

    Spring Boot:The Bean Validation API is on the classpath but no implementation could be found https:/ ...