慢慢修改:

#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. centos下配置sftp且限制用户访问目录

    SFTP在Linux下是一个很方便很安全的文件传输工具,我常常用它在Linux服务器上替代传统的ftp来传输文件.众所周知SFTP账号是基于SSH账号的,默认情况下访问服务器的权限很大,下面的教程就是 ...

  2. 介绍一些有趣的MySQL pager命令

    一.分页结果集 在Linux系统中中,我们经常也会使用一些分页查看命令,例如less.more等.同样,MySQL客户端也提供了类似的命令,用来帮助我们对查询结果集进行分页.比如,SHOW ENGIN ...

  3. 如何实现json字符串和 BsonDocument的互相转换

    String to BsonDocument string json = "{ 'foo' : 'bar' }"; MongoDB.Bson.BsonDocument docume ...

  4. Logcat用法初探

    首先定位到adb所在的目录 将手机连接上电脑. 在命令行运行: adb devices 这个命令可以列出所有连上的移动设备. 在命令行运行: adb logcat 可以显示日志.   以下是例子截图: ...

  5. [SSH] Intro to SSH command

    Create an ssh key: ssh-keygen Copy an SSH key to a remoate server: ssh-copy-id root@104.197.227.8 // ...

  6. C++ 函数适配器

    1.考虑下面的需求,在一个int的vector中,找出一个比5的元素,容易想到的解决办法,定义一个方法对象,使用模板,如下:vector<int>::iterator iter = fin ...

  7. 程序员的福音,AI可以自动修复bug了!

    人工智能完全学会自己编程,可能说起来还有一种科幻感,但 AI 帮程序员找 bug 这件事,已经达到了不错的水平. 北京大学.微软亚洲研究院和中国电子科技大学就一起尝试着让 AI 找 bug.微软亚洲研 ...

  8. CentOS7安装 Apache HTTP 服务器

    CentOS7安装 Apache HTTP 服务器 时间:2015-05-02 00:45来源:linux.cn 作者:linux.cn 举报 点击:11457次 不管你因为什么原因使用服务器,大部分 ...

  9. 【转】Java四种线程池的使用

    Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程.newFixe ...

  10. Python+OpenCV实现FasterRcnn样本查看器

    一.上代码 import cv2 import os def get_samples(dir): datasets = [] files = os.listdir(dir) for file in f ...