socket用select实现异步通讯
来源:互联网 发布:复杂网络定义 编辑:程序博客网 时间:2024/06/05 19:44
HANDLE ComPort = (HANDLE)CompletionPort;
DWORD BytesTransferred;
//LPOVERLAPPED Overlapped;
LPPER_HANDLE_DATA PerHandleData;
LPPER_IO_OPERATION_DATA PerIoData;
DWORD SendBytes,RecvBytes;
DWORD Flags = 0;
BOOL bT;
while(TRUE)
{
//等待完成端口上SOCKET的完成
cout<<"["<<GetCurrentProcessId()<<":"<<GetCurrentThreadId()<<"]"<<":等待完成端口上SOCKET的完成"<<endl;
bT = GetQueuedCompletionStatus(ComPort,
&BytesTransferred,(LPDWORD)&PerHandleData,
(LPOVERLAPPED *)&PerIoData,INFINITE);
//检查是否有错误产生
if(BytesTransferred == 0 &&
(PerIoData->OperationType == RECV_POSTED ||
PerIoData->OperationType == SEND_POSTED))
{
//关闭SOCKET
cout<<"["<<GetCurrentProcessId()<<":"<<GetCurrentThreadId()<<"]"<<PerHandleData->sock<<"SOCKET关闭"<<endl;
closesocket(PerHandleData->sock);
free(PerHandleData);
free(PerIoData);
continue;
}
//如果结束socket后做了其他事情,费时间,那么...要么优化其他事情,转移到其他地方去做.要么不适用IOCP.
//Sleep(1000);
//为请求服务
if(PerIoData->OperationType == RECV_POSTED)
{
//处理
cout<<"["<<GetCurrentProcessId()<<":"<<GetCurrentThreadId()<<"]"<<"接收处理"<<endl;
cout<<"["<<GetCurrentProcessId()<<":"<<GetCurrentThreadId()<<"]"<<PerHandleData->sock<<" SOCKET :"<<PerIoData->Buff<<endl;
//回应客户端
ZeroMemory(PerIoData->Buff,24);
//#define _CRT_SECURE_NO_WARNINGS 1
//strcpy(PerIoData->Buff,"OK");
strcpy_s(PerIoData->Buff,"OK");
Flags = 0;
ZeroMemory((LPVOID)&(PerIoData->Overlapped),sizeof(OVERLAPPED));
PerIoData->DataBuff.len = 2;
PerIoData->DataBuff.buf = PerIoData->Buff;
PerIoData->OperationType = SEND_POSTED;
WSASend(PerHandleData->sock,&(PerIoData->DataBuff),
1,&SendBytes,0,&(PerIoData->Overlapped),NULL);
}
else //if(PerIoData->OperationType == SEND_POSTED)
{
//发送时的处理
cout<<"["<<GetCurrentProcessId()<<":"<<setfill('0')<<setw(4)<<GetCurrentThreadId()<<"]"<<"发送处理"<<endl;
Flags = 0;
ZeroMemory((LPVOID)&(PerIoData->Overlapped),sizeof(OVERLAPPED));
ZeroMemory(PerIoData->Buff,24);
PerIoData->DataBuff.len = 24;
PerIoData->DataBuff.buf = PerIoData->Buff;
PerIoData->OperationType = RECV_POSTED;
WSARecv(PerHandleData->sock,&(PerIoData->DataBuff),
1,&RecvBytes,&Flags,&(PerIoData->Overlapped),NULL);
}
}
- socket用select实现异步通讯
- Linux网络编程用select实现异步通讯聊天程序
- Linux socket网络编程之聊天室(三):select异步通讯实现
- Linux socket网络编程之聊天室(三):select异步通讯实现
- Linux socket网络编程之聊天室(三):select异步通讯实现
- C# Socket异步通讯实现详解
- C# Socket异步通讯客实现源码
- C# Socket异步通讯实现详解
- Socket通讯 select详解
- socket异步通讯
- windows下实现socket 的 通讯的 select 模型
- 通过Socket实现进程间异步通讯(一)
- 通过Socket实现进程间异步通讯(二)
- 通过Socket实现进程间异步通讯(三)
- 通过Socket实现进程间异步通讯(四)
- 通过Socket实现进程间异步通讯(一)
- 通过Socket实现进程间异步通讯(二)
- 通过Socket实现进程间异步通讯(三)
- 决策树
- 利用XMLDictionary解析xml 将XML文件转换为NSDictionary
- myeclipse配置性能提速
- 代码设置RadioButton的高端技巧 - wavky
- js基础
- socket用select实现异步通讯
- 黑马程序员 - 多线程
- JAVA 笔记-XML(六)
- Java中“路径”浅谈
- STM32 理解宏定义的重要性
- 如何优化SQL语句的心得浅谈
- TegraK1(ubuntu)上添加QtCreator并运行OpenCv
- RecyclerView-干掉Listview和GridView
- NGUI所见即所得之UIAtlasMaker , UIAtlas