重叠ioserver.cpp
2008-01-14 15:23
183 查看
// 重叠ioserver.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "重叠ioserver.h"
#include "winsock2.h"
#define DATA_BUFSIZE 256
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#pragma comment(lib,"WS2_32")
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
WSADATA wsaData;
WSABUF wsaBuf;
char buffer[DATA_BUFSIZE];
DWORD dwEventTotal;
DWORD dwRecvBytes;
DWORD dwFlag;
DWORD dwTransferred;
WSAEVENT wsaEvent[WSA_MAXIMUM_WAIT_EVENTS];
WSAOVERLAPPED AcceptOverlapped;
SOCKET hSocketServer,hSocketAccept;
SOCKADDR_IN hAddrServer,hAddrClient;
int saRemoteLen;
int nRet;
nRet=WSAStartup(MAKEWORD(2,2),&wsaData);
if(nRet!=0)
{
cout<<"WSAStartup Failed!"<<endl;
return 0;
}
hAddrServer.sin_family=AF_INET;
hAddrServer.sin_port=htons(8888);
hAddrServer.sin_addr.s_addr=INADDR_ANY;
hSocketServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(hSocketServer==SOCKET_ERROR)
{
cout<<"create socket failed"<<endl;
return 0;
}
nRet=::bind(hSocketServer,(SOCKADDR*)&hAddrServer,sizeof(hAddrServer));
if(nRet!=0)
{
cout<<"bind failed!"<<endl;
return 0;
}
nRet=::listen(hSocketServer,5);
if(nRet!=0)
{
cout<<"listen failed"<<endl;
return 0;
}
saRemoteLen=sizeof(hAddrClient);
hSocketAccept=::WSAAccept(hSocketServer,(SOCKADDR*)&hAddrClient,&saRemoteLen,0,NULL);
cout<<"Client :"<<::inet_ntoa(hAddrClient.sin_addr)<<"connect"<<endl;
dwEventTotal=0;
wsaEvent[dwEventTotal]=::WSACreateEvent();
ZeroMemory(&AcceptOverlapped,sizeof(AcceptOverlapped));
wsaBuf.len=DATA_BUFSIZE;
wsaBuf.buf=buffer;
dwFlag=0;
dwEventTotal++;
if(WSARecv(hSocketAccept,&wsaBuf,1,&dwRecvBytes,&dwFlag,&AcceptOverlapped,NULL)==SOCKET_ERROR)
{
if(WSAGetLastError()!=WSA_IO_PENDING)
{
cout<<"error1"<<endl;
}
}
while(true)
{
DWORD dwIndex;
dwIndex=::WSAWaitForMultipleEvents(dwEventTotal,wsaEvent,FALSE,WSA_INFINITE,FALSE);
::WSAResetEvent(wsaEvent[dwIndex-WSA_WAIT_EVENT_0]);
::WSAGetOverlappedResult(hSocketAccept,&AcceptOverlapped,&dwTransferred,FALSE,&dwFlag);
if(dwTransferred==0)
{
cout<<"closing socket"<<hSocketAccept<<endl;
closesocket(hSocketAccept);
WSACloseEvent(wsaEvent[dwIndex-WSA_WAIT_EVENT_0]);
return 0;
}
cout<<"recv data from "<<hSocketAccept<<endl;
dwFlag=0;
ZeroMemory(&AcceptOverlapped,sizeof(WSAOVERLAPPED));
AcceptOverlapped.hEvent=wsaEvent[dwIndex-WSA_WAIT_EVENT_0];
wsaBuf.len=DATA_BUFSIZE;
wsaBuf.buf=buffer;
if(::WSARecv(hSocketAccept,&wsaBuf,1,&dwRecvBytes,&dwFlag,&AcceptOverlapped,NULL)==SOCKET_ERROR)
{
if(WSAGetLastError()!=WSA_IO_PENDING)
{
cout<<"error2"<<endl;
break;
}
}
}
::WSACleanup();
}
return nRetCode;
}
//
#include "stdafx.h"
#include "重叠ioserver.h"
#include "winsock2.h"
#define DATA_BUFSIZE 256
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#pragma comment(lib,"WS2_32")
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
WSADATA wsaData;
WSABUF wsaBuf;
char buffer[DATA_BUFSIZE];
DWORD dwEventTotal;
DWORD dwRecvBytes;
DWORD dwFlag;
DWORD dwTransferred;
WSAEVENT wsaEvent[WSA_MAXIMUM_WAIT_EVENTS];
WSAOVERLAPPED AcceptOverlapped;
SOCKET hSocketServer,hSocketAccept;
SOCKADDR_IN hAddrServer,hAddrClient;
int saRemoteLen;
int nRet;
nRet=WSAStartup(MAKEWORD(2,2),&wsaData);
if(nRet!=0)
{
cout<<"WSAStartup Failed!"<<endl;
return 0;
}
hAddrServer.sin_family=AF_INET;
hAddrServer.sin_port=htons(8888);
hAddrServer.sin_addr.s_addr=INADDR_ANY;
hSocketServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(hSocketServer==SOCKET_ERROR)
{
cout<<"create socket failed"<<endl;
return 0;
}
nRet=::bind(hSocketServer,(SOCKADDR*)&hAddrServer,sizeof(hAddrServer));
if(nRet!=0)
{
cout<<"bind failed!"<<endl;
return 0;
}
nRet=::listen(hSocketServer,5);
if(nRet!=0)
{
cout<<"listen failed"<<endl;
return 0;
}
saRemoteLen=sizeof(hAddrClient);
hSocketAccept=::WSAAccept(hSocketServer,(SOCKADDR*)&hAddrClient,&saRemoteLen,0,NULL);
cout<<"Client :"<<::inet_ntoa(hAddrClient.sin_addr)<<"connect"<<endl;
dwEventTotal=0;
wsaEvent[dwEventTotal]=::WSACreateEvent();
ZeroMemory(&AcceptOverlapped,sizeof(AcceptOverlapped));
wsaBuf.len=DATA_BUFSIZE;
wsaBuf.buf=buffer;
dwFlag=0;
dwEventTotal++;
if(WSARecv(hSocketAccept,&wsaBuf,1,&dwRecvBytes,&dwFlag,&AcceptOverlapped,NULL)==SOCKET_ERROR)
{
if(WSAGetLastError()!=WSA_IO_PENDING)
{
cout<<"error1"<<endl;
}
}
while(true)
{
DWORD dwIndex;
dwIndex=::WSAWaitForMultipleEvents(dwEventTotal,wsaEvent,FALSE,WSA_INFINITE,FALSE);
::WSAResetEvent(wsaEvent[dwIndex-WSA_WAIT_EVENT_0]);
::WSAGetOverlappedResult(hSocketAccept,&AcceptOverlapped,&dwTransferred,FALSE,&dwFlag);
if(dwTransferred==0)
{
cout<<"closing socket"<<hSocketAccept<<endl;
closesocket(hSocketAccept);
WSACloseEvent(wsaEvent[dwIndex-WSA_WAIT_EVENT_0]);
return 0;
}
cout<<"recv data from "<<hSocketAccept<<endl;
dwFlag=0;
ZeroMemory(&AcceptOverlapped,sizeof(WSAOVERLAPPED));
AcceptOverlapped.hEvent=wsaEvent[dwIndex-WSA_WAIT_EVENT_0];
wsaBuf.len=DATA_BUFSIZE;
wsaBuf.buf=buffer;
if(::WSARecv(hSocketAccept,&wsaBuf,1,&dwRecvBytes,&dwFlag,&AcceptOverlapped,NULL)==SOCKET_ERROR)
{
if(WSAGetLastError()!=WSA_IO_PENDING)
{
cout<<"error2"<<endl;
break;
}
}
}
::WSACleanup();
}
return nRetCode;
}
相关文章推荐
- [使用重叠IO的命名管道服务器示例]Named Pipe Server Using Overlapped I/O
- java.io.ioexception: server returned http response code: 500 for url:
- 【网络编程】之十一、重叠IO Overlapped IO 完成例程
- GameServer.cpp
- ADMU3007E: 异常 com.ibm.websphere.management.exception.NoServerDefinedExceptio
- 重叠IO与IOCP
- OPC 技术文档之 IOPCBrowseServerAddressSpace 的使用
- 重叠IO overlapped I/O 运用详解
- flask_socket_io中报错RuntimeError: You need to use the eventlet server. See the Deployment section of the documentation for more information.的解决办法
- 设备I/O之OVERLAPPED(IO重叠)
- 关于重叠IO网络编程模型的学习!
- ASIO官方例子学习1.为服务器异步操作定制内存分配模型代码分析(allocation/server.cpp)
- SQL SERVER IO request 超时
- Chapter10-IO 重叠IO 完成例程
- OPC Server与YFIOServer成功绑定
- 重叠IO overlapped I/O 运用详解
- YFIOServer 后台IO接口使用说明
- tomcat链接mysql时超时报错java.io.EOFException: Can not read response from server. Expected to read 4 bytes,
- winsock IO 模型---重叠IO之事件通知 example code
- cpp-netlib async_server处理POST请求