资源简介
一个VC++ socket 异步通信类
代码片段和文件信息
/*
** Copyright (C) Roman Ukhov 2000
** e-mail: r_ukhov@yahoo.com
** http://rukhov.newmail.ru
*/
#include “http_server.hpp“
#include “async_socket.hpp“
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
namespace network
{
async_socket::async_socket(unsigned long _timeout):
the_socket(INVALID_SOCKET)
hEvent(WSA_INVALID_EVENT)
hStopEvent(WSA_INVALID_EVENT)
l_events(0)
b_auto_delete(false)
timeout(_timeout)
{
hStopEvent=WSACreateEvent();
hEvent=WSACreateEvent();
readO.Offset=0;
readO.OffsetHigh=0;
readO.hEvent=CreateEvent(NULL TRUE FALSE NULL);
writeO.Offset=0;
writeO.OffsetHigh=0;
writeO.hEvent=CreateEvent(NULL TRUE FALSE NULL);
}
async_socket::~async_socket()
{
WSASetEvent(hStopEvent);
socket_thread.wait_for_end();
if(the_socket!=INVALID_SOCKET){
shutdown();
::closesocket(the_socket);
the_socket=INVALID_SOCKET;
}
if(hEvent!=WSA_INVALID_EVENT){
WSACloseEvent(hEvent);
hEvent=WSA_INVALID_EVENT;
}
if(hStopEvent!=WSA_INVALID_EVENT){
WSACloseEvent(hStopEvent);
hStopEvent=WSA_INVALID_EVENT;
}
if(readO.hEvent!=NULL)
CloseHandle(readO.hEvent);
if(writeO.hEvent!=NULL)
CloseHandle(writeO.hEvent);
}
bool
async_socket::bind(const ip_addr& addr)
{
::bind(the_socket &addr sizeof(ip_addr));
return true;
}
void
async_socket::close()
{
WSAResetEvent(hEvent);
WSASetEvent(hStopEvent);
}
bool
async_socket::init()
{
if(the_socket==INVALID_SOCKET)
return false;
WSAResetEvent(hStopEvent);
return socket_thread.create(static_thread_func this);
}
bool
async_socket::create(
int nSocketType/* = SOCK_STREAM*/
long lEvent/* = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE*/
const ip_addr& addr/* = ip_addr(00000)*/)
{
bool ret_val(true);
the_socket=socket( AF_INET nSocketType 0);
if(the_socket!=INVALID_SOCKET){
if(select(lEvent)==true){
if(bind(addr)==true)
if(init()==true)
return true;
}
}
close();
return false;
}
bool
async_socket::select(long lEvent/* = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE */)
{
if(WSAEventSelect(
the_socket
hEvent
lEvent)==SOCKET_ERROR){
return false;
}else{
l_events=lEvent;
return true;
}
}
int
async_socket::static_thread_func(void* p)
{
return reinterpret_cast(p)->socket_func();
}
int
async_socket::socket_func()
{
WSAEVENT handles[]={
hStopEvent
readO.hEvent
writeO.hEvent
hEvent};
WSANETWORKEVENTS netEvents;
DWORD wait_res;
DWORD dwTimeOUT;
on_attach();
for(;;){
if(timeout == 0)
dwTimeOUT=WSA_INFINITE;
else
dwTimeOUT=timeout;
wait_
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2989 2000-11-27 20:43 HTTP_Server\main.cpp
文件 1137 2000-11-27 20:43 HTTP_Server\prog_opt.cpp
文件 710 2000-11-27 20:46 HTTP_Server\ip_addr.hpp
文件 963 2000-11-27 20:47 HTTP_Server\thread.hpp
文件 1299 2000-11-27 20:47 HTTP_Server\sinchro.hpp
文件 1486 2000-11-27 20:47 HTTP_Server\prog_opt.hpp
文件 2740 2000-11-27 20:46 HTTP_Server\respond.h
文件 2126 2000-11-27 20:44 HTTP_Server\thread.cpp
文件 24750 2000-11-27 20:44 HTTP_Server\respond.cpp
文件 1080 2000-11-27 20:45 HTTP_Server\request.h
文件 1548 2000-11-27 20:43 HTTP_Server\ip_addr.cpp
文件 6776 2000-11-27 16:26 HTTP_Server\HTTP_Server.dsp
文件 2118 2000-11-27 20:43 HTTP_Server\http_date.cpp
文件 1547 2000-11-27 20:46 HTTP_Server\http_date.hpp
文件 143360 2000-11-27 20:31 HTTP_Server\HTTP_Server.exe
文件 2214 2000-11-27 20:46 HTTP_Server\async_socket.hpp
文件 553 2000-11-27 20:46 HTTP_Server\global_defs.hpp
文件 4997 2000-11-27 20:43 HTTP_Server\listen_socket.cpp
文件 1574 2000-11-27 20:45 HTTP_Server\request_socket.h
文件 852 2000-11-27 20:43 HTTP_Server\global_defs.cpp
文件 448 2000-11-27 20:46 HTTP_Server\http_server.hpp
文件 3584 2000-11-27 20:44 HTTP_Server\request_socket.cpp
文件 1792 2000-11-27 20:44 HTTP_Server\listen_socket.h
文件 4876 2000-11-27 20:44 HTTP_Server\request.cpp
文件 8012 2000-11-27 20:43 HTTP_Server\async_socket.cpp
文件 133 2000-11-27 20:43 HTTP_Server\http_server.cpp
文件 545 2000-11-27 20:38 HTTP_Server\HTTP_Server.dsw
文件 12446 2000-11-27 20:40 HTTP_Server\HTTP_Server.mak
文件 2347 2000-11-27 20:40 HTTP_Server\HTTP_Server.dep
- 上一篇:cocos3.x惯性滑动源码
- 下一篇:银行叫号系统模拟C语言
相关资源
- 固高GT编程手册的Vc++单轴运动程序
- AES加密解密系统 VC++6.0 实现
- VC++access与excel数据的导入导出
- opengl实现鼠标坐标的显示
- Windows下Socket文件数据传输
- linpop 聊天软件
- VC++关于纹理特征提取的代码完整
- 基于mfcvc++6.0的图书馆管理系统
- 贝塞尔曲面 vc++ opengl
- 基于Windows Socket的安全通信(C++实现)
- 如何在VC++ 6.0创建RTX项目
- VC++ 实现将本地文件通过HTTP上传到网
- VC++采用内存映射方式高效率读写大数
- MFC基于多线程的聊天程序用了winsock套
- 《C语言课程设计》 学生成绩管理系统
- VC++6.0无法打开工程解决办法
- c语言实现Socket套接字通信
- VC++6.0实现读取硬盘唯一序列号源码和
- mfc安装全局钩子,显示窗口的标题
- vs2010下c语言编写c/s socket 文件内容传
- 一个好用的C++编写的websocket服务端d
- IOCP SOCKETserver and client 并且内]
- 使用动态优先权的进程调度算法的模
- 读取串口数据并画实时曲线的VC++程序
- VC++实现滑块皮肤 slider skin
- MFC 计算文件MD5码 VC++
- VC++垃圾文件清理工具源码.rar
- Win32窗口创建源码 by浅墨
- vc++6.0配置OpenCV
- http协议实现c++
评论
共有 条评论