修改的select
慢慢修改:
#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的更多相关文章
- 修改默认select样式
<style type="text/css"> .select_demo,.select_list { width: 400px; height: 60px; } .s ...
- 弹窗中修改select默认值遇到的问题
弹窗中修改select默认值无效 前提: 项目中遇到一个需求, 在一个弹窗中,有很多个select都是在打开弹窗的同时由js自动生成的(每次打开都自动重新生成一遍). 弹窗打开后,从每个select的 ...
- 为select 设置样式
问题: 在为表单添加下拉菜单时,有时候对菜单的样式没有特别的要求,就是需要修改下select元素的宽度和高度,但众所周知select元素的样式很难修改: select在各个浏览器,字体大小为14px时 ...
- MySQL修改root账号密码
MySQL数据库中如何修改root用户的密码呢?下面总结了修改root用户密码的一些方法 1: 使用set password语句修改 mysql> select user(); +----- ...
- SQL SELECT语句
基本SQL SELECT语句 1. 下面的语句是否可以执行成功 select ename , job , sal as salary from emp; 2. 下面的语句 ...
- 修改Oracle 表空间名称 tablespace name
修改表空间名称步骤如下: 1. 使用oracle用户登录执行 $sqlplus / as sysdba 2. 执行修改表空间命令如下 SQL> alter tablespace TEST re ...
- html自定义checkbox、radio、select —— select篇
上一篇<html自定义checkbox.radio.select —— checkbox.radio篇>介绍了我们是怎么将 html 自带的 checkbox.radio 改成我们自定义的 ...
- MySQL查看数据库大小、表大小和最后修改时间
查看数据库表基本信息. select * from information_schema.TABLES where information_schema.TABLES.TABLE_SCHEMA = ' ...
- 数据库————Select 查询
--创建mydb数据库create database mydb go --使用数据库use mydb go --水果表 create table Fruit ( Ids varchar() prima ...
随机推荐
- 微信小程序wxml文件中调用自定义函数
想在微信小程序的wxml文件里自如的像vue那样调用自定义的方法,发现并不成功,得利用WXS脚本语言. WXS脚本语言是 WeiXin Script 脚本语言的简称,是JavaScript.JSON. ...
- Python科学计算技巧积累四——双y轴图像绘制
双y轴图像具有单y轴图像没有的对比效果,在MATLAB中有plotyy函数可以实现,Python的实现方式没有MATLAB那样方便,不过实现效果却也不见得差. 以往我常用的绘图命令是import ma ...
- Nginx限制某个IP同一时间段的访问次数和请求数示例代码
nginx可以通过ngx_http_limit_conn_module和ngx_http_limit_req_module配置来限制ip在同一时间段的访问次数. ngx_http_limit_conn ...
- 【Kafka】Kafka-分区数-备份数-如何设置-怎么确定-怎么修改
Kafka-分区数-备份数-如何设置-怎么确定-怎么修改 kafka partition 数量 更新_百度搜索 kafka重新分配partition - - CSDN博客 如何为Kafka集群选择合适 ...
- OpenGL ES Shader语言中的函数不支持递归
An example function definition is given here for a simple function that computes basic diffuse light ...
- OpenGL ES 3.0顶点着色器(一)
OpenGL ES 3.0流程图 1.Vertex Shader(顶点着色器) 顶点着色实现了一种通用的可编程方法操作顶点. 顶点着色器的输入包括以下几个: • Shader program.程序的顶 ...
- OpenStack云计算之路-Mitaka 版本
1.1 云计算简介 云计算(英语:cloud computing ),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备. 云计算是继1980年代 ...
- thinkphp3错误:syntax error, unexpected 'list' (T_LIST), expecting identifier (T_STRING)
syntax error, unexpected 'list' (T_LIST), expecting identifier (T_STRING) 出现这个错误的原因是,list是php的一个函数,系 ...
- ZH奶酪:PHP抓取网页方法总结
From:http://www.jb51.net/article/24343.htm 在做一些天气预报或者RSS订阅的程序时,往往需要抓取非本地文件,一般情况下都是利用php模拟浏览器的访问,通过ht ...
- SRA秘钥生成与解密
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java ...