 /**//* ========================================================================
Copyright (c) 2010,
All rights reserved.

|文件名稱|:CommSocket.h
|文件標識|:通信模塊
|摘 要|: 封裝了在套接字上的各種通信操作。

|當前版本|:
|作 者|:張濤
|完成日期|:

|取代版本|:
|原 作 者|:張濤
|完成日期|:
======================================================================== */
#pragma once
extern "C"
  {
__declspec(dllexport) void __stdcall CommSocketInit();
__declspec(dllexport) void __stdcall CommSocketDestroy();

__declspec(dllexport) HANDLE __stdcall CommSocketCreate( UINT nSocketPort , int nSocketType,LPCTSTR lpszSocketAddress );
__declspec(dllexport) HANDLE __stdcall CommSocketAccept(HANDLE hCommSocket, LPSTR lpSockAddr,UINT *nPort);
__declspec(dllexport) BOOLEAN __stdcall CommSocketConnect( HANDLE hCommSocket,LPCTSTR lpszHostAddress, UINT nHostPort );
__declspec(dllexport) BOOLEAN __stdcall CommSocketListen(HANDLE hCommSocket, int nConnectionBacklog );
__declspec(dllexport) int __stdcall CommSocketSend( HANDLE hCommSocket,const void* lpBuf, int nBufLen, int nFlags );
__declspec(dllexport) int __stdcall CommSocketReceive(HANDLE hCommSocket, void* lpBuf, int nBufLen, int nFlags );
__declspec(dllexport) int __stdcall CommSocketGetLastError();
__declspec(dllexport) void __stdcall CommSocketClose(HANDLE hCommSocket);
};
 /**/////////////////////////////////////////////////////////////////////////// //函數名:CommSocketInit
//功能: 初始化套接字,加載sock庫
//參數: 無
//返回值:無
 /**///////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////// //函數名: CommSocketDestroy
//功能: 卸載Socks庫
//參數: 無
//返回值:無
 /**///////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////// //函數名:CommSocketCreate
//功能: 創建一個指定類型和地址的套接字
//參數:
// [IN] UINT nSocketPort // 端口號
// [IN] int nSocketType // 套接字類型
// [IN] LPCTSTR lpszSocketAddress //IP地址
//返回值:
// 創建成功返回一個指向套接字的句柄,失敗返回INVALID_SOCKET_HANDLE
//引用函數:
 /**///////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////// //函數名: CommSocketAccept
//功能: 接受遠程連接
//參數:
// [IN] HANDLE hCommSocket //指向本地監聽套接字的句柄
// [IN] LPSTR lpSockAddr //客戶端主機IP
// [IN] UINT *nPort //客戶端進程PORT
//返回值:
// 接受成功返回一個指向專門用于IO處理的套接字句柄,
// 否則返回INVALID_SOCKET_HANDLE
 /**///////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////// //函數名:CommSocketListen
//功能: 監聽連接請求
//參數:
// [IN] HANDLE hCommSocket //套接字句柄
// [IN] int nConnectionBacklog //最大連接隊列長度
//返回值:
// BOOL
 /**///////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////// //函數名:CommSocketConnect
//功能: 請求連接到服務器
//參數:
// [IN] HANDLE hCommSocket //套接字句柄
// [IN] LPCTSTR lpszHostAddress//服務器IP
// [IN] UINT nHostPort//服務port
//返回值:
// BOOL
 /**///////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////// //函數名:CommSocketSend
//功能: 發送 數據
//參數:
// [IN] HANDLE hCommSocket //套接字句柄
// [IN] const void* lpBuf //指向發送緩沖區的指針
// [IN] int nBufLen // 發送數據的長度
// [IN] int nFlags // 標準位
//返回值:
// int,返回已發送的字節數
 /**///////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////// //函數名:CommSocketReceive
//功能: 發送 數據
//參數:
// [IN] HANDLE hCommSocket //套接字句柄
// [IN] const void* lpBuf //指向發送緩沖區的指針
// [IN] int nBufLen // 發送數據的長度
// [IN] int nFlags // 標準位
//返回值:
// int,返回已接收的字節數
 /**///////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////// //函數名:CommSocketGetLastError
//功能: 獲取上次錯誤代碼
//參數:
//返回值:int 錯誤代碼值
 /**///////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////// //函數名:CommSocketClose
//功能: 關閉套接字,回收套接字資源
//參數:
// [IN] HANDLE hCommSocket //套接字句柄
//返回值:無
 /**///////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////// //測試用例
//Sample
 /**/////////////////////////////////////////////////////////////////////////// //BOOL Sample(void)
//{
//
// CCommSocket testSocket;
// BOOL bCreate = testSocket.Create(8888);
// if (!bCreate)
// {
// return FALSE;
// }
//
// BOOL nListen= testSocket.Listen();
// if (!nListen)
// {
// return FALSE;
// }
//
// CCommSocket ioSocket ;
// char szIP[20] ={0};
// UINT nPort = 0;
// BOOL bAccept =testSocket.Accept(ioSocket,szIP,&nPort);//阻塞處
// if (!bAccept)
// {
// return FALSE;
// }
//
// char szBuf[10]="test";
// int nSend = ioSocket.Send(szBuf,sizeof(szBuf));
// if (nSend < 0)
// {
// return FALSE;//BUG 2010-09-08
// }
//
// int nReceive = ioSocket.Receive(szBuf,sizeof(szBuf));
// if (nReceive < 0)
// {
// return FALSE;
// }
//
// ioSocket.Close();
// testSocket.Close();
// return TRUE;
//
//}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CommSocket.cpp : Defines the exported functions for the DLL application.
//

#include "stdafx.h"
#include "CommSocket.h"

#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")

typedef struct _PSOCKET_HANDLE
  {
SOCKET m_socket;
} SOCKET_HANDLE,*PSOCKET_HANDLE;

 /**/////////////////////////////////////////////////////////////////////////// //函數名: CommSocketInit
//功能: 加載Socks庫
//參數: 無
//返回值:無
 /**/////////////////////////////////////////////////////////////////////////// void __stdcall CommSocketInit()
  {
WSACleanup( );

WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
 {
return;
}

if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 )
 {
WSACleanup( );
return;
}

}

 /**/////////////////////////////////////////////////////////////////////////// //函數名: CommSocketDestroy
//功能: 卸載Socks庫
//參數: 無
//返回值:無
 /**/////////////////////////////////////////////////////////////////////////// void __stdcall CommSocketDestroy()
  {
WSACleanup( );
}

 /**/////////////////////////////////////////////////////////////////////////// //函數名:CommSocketCreate
//功能: 創建一個指定類型和地址的套接字
//參數:
// [IN] UINT nSocketPort // 端口號
// [IN] int nSocketType // 套接字類型
// [IN] LPCTSTR lpszSocketAddress //IP地址
//返回值:
// 創建成功返回一個指向套接字的句柄,失敗返回INVALID_SOCKET_HANDLE
//引用函數:
 /**/////////////////////////////////////////////////////////////////////////// HANDLE __stdcall CommSocketCreate( UINT nSocketPort , int nSocketType,LPCTSTR lpszSocketAddress )
  {
PSOCKET_HANDLE pHandle = NULL;
do
 {
SOCKET sock = socket(AF_INET,nSocketType,IPPROTO_IP);
if(INVALID_SOCKET==sock)
 {
break;
}

 sockaddr_in sa= {AF_INET};
sa.sin_port=htons(nSocketPort);
sa.sin_addr.S_un.S_addr = htonl(ADDR_ANY);


int nRet = bind(sock,(sockaddr *)&sa,sizeof(sa));
int n = WSAGetLastError();

if (SOCKET_ERROR == nRet)
 {
break;
}
pHandle = new SOCKET_HANDLE;

pHandle->m_socket = sock;

} while (0);

return pHandle;

}

 /**/////////////////////////////////////////////////////////////////////////// //函數名: CommSocketAccept
//功能: 接受遠程連接
//參數:
// [IN] HANDLE hCommSocket //指向本地監聽套接字的句柄
// [IN] LPSTR lpSockAddr //客戶端主機IP
// [IN] UINT *nPort //客戶端進程PORT
//返回值:
// 接受成功返回一個指向專門用于IO處理的套接字句柄,
// 否則返回INVALID_SOCKET_HANDLE
 /**/////////////////////////////////////////////////////////////////////////// HANDLE __stdcall CommSocketAccept(HANDLE hCommSocket, LPSTR lpSockAddr,UINT *nPort)
  {
PSOCKET_HANDLE pIOHandle = new SOCKET_HANDLE;
PSOCKET_HANDLE pHandle = (PSOCKET_HANDLE)hCommSocket;
 sockaddr_in sa= {AF_INET};//客戶套接字地址
int nLen=sizeof(sa);

pIOHandle->m_socket = accept(pHandle->m_socket,(sockaddr*)&sa,&nLen);
if(INVALID_SOCKET==pIOHandle->m_socket)
 {
pIOHandle = NULL;
}

if(lpSockAddr)
strcpy(lpSockAddr,inet_ntoa(sa.sin_addr));
if(nPort)
*nPort=htons(sa.sin_port);

return pIOHandle;
}

 /**/////////////////////////////////////////////////////////////////////////// //函數名:CommSocketConnect
//功能: 請求連接到服務器
//參數:
// [IN] HANDLE hCommSocket //套接字句柄
// [IN] LPCTSTR lpszHostAddress//服務器IP
// [IN] UINT nHostPort//服務port
//返回值:
// BOOL
 /**/////////////////////////////////////////////////////////////////////////// BOOLEAN __stdcall CommSocketConnect( HANDLE hCommSocket,LPCTSTR lpszHostAddress, UINT nHostPort )
  {
BOOLEAN bResult = FALSE;
PSOCKET_HANDLE pHandle = (PSOCKET_HANDLE)hCommSocket;

 sockaddr_in sa = {AF_INET};
sa.sin_port = htons(nHostPort);
sa.sin_addr.s_addr =inet_addr((PCSTR)lpszHostAddress);

int nlen = sizeof(sa);
int err=connect(pHandle->m_socket,(sockaddr*)&sa,sizeof(sa));
if(SOCKET_ERROR != err)
 {
bResult = TRUE;
}
return bResult;

}
 /**/////////////////////////////////////////////////////////////////////////// //函數名:CommSocketListen
//功能: 監聽連接請求
//參數:
// [IN] HANDLE hCommSocket //套接字句柄
// [IN] int nConnectionBacklog //最大連接隊列長度
//返回值:
// BOOL
 /**/////////////////////////////////////////////////////////////////////////// BOOLEAN __stdcall CommSocketListen(HANDLE hCommSocket, int nConnectionBacklog )
  {
PSOCKET_HANDLE pHandle = (PSOCKET_HANDLE)hCommSocket;
return !listen(pHandle->m_socket,nConnectionBacklog);
}


 /**/////////////////////////////////////////////////////////////////////////// //函數名:CommSocketSend
//功能: 發送 數據
//參數:
// [IN] HANDLE hCommSocket //套接字句柄
// [IN] const void* lpBuf //指向發送緩沖區的指針
// [IN] int nBufLen // 發送數據的長度
// [IN] int nFlags // 標準位
//返回值:
// int,返回已發送的字節數
 /**/////////////////////////////////////////////////////////////////////////// int __stdcall CommSocketSend( HANDLE hCommSocket,const void* lpBuf, int nBufLen, int nFlags )
  {
PSOCKET_HANDLE pHandle = (PSOCKET_HANDLE)hCommSocket;
return send(pHandle->m_socket, (LPSTR)lpBuf, nBufLen, nFlags);
}

 /**/////////////////////////////////////////////////////////////////////////// //函數名:CommSocketReceive
//功能: 發送 數據
//參數:
// [IN] HANDLE hCommSocket //套接字句柄
// [IN] const void* lpBuf //指向發送緩沖區的指針
// [IN] int nBufLen // 發送數據的長度
// [IN] int nFlags // 標準位
//返回值:
// int,返回已接收的字節數
 /**/////////////////////////////////////////////////////////////////////////// int __stdcall CommSocketReceive(HANDLE hCommSocket, void* lpBuf, int nBufLen, int nFlags )
  {
PSOCKET_HANDLE pHandle = (PSOCKET_HANDLE)hCommSocket;
return recv(pHandle->m_socket, (LPSTR)lpBuf, nBufLen, nFlags);
}


 /**/////////////////////////////////////////////////////////////////////////// //函數名:CommSocketGetLastError
//功能: 獲取上次錯誤代碼
//參數:
//返回值:int 錯誤代碼值
 /**/////////////////////////////////////////////////////////////////////////// int __stdcall CommSocketGetLastError()
  {
return WSAGetLastError();
}

 /**/////////////////////////////////////////////////////////////////////////// //函數名:CommSocketClose
//功能: 關閉套接字,回收套接字資源
//參數:
// [IN] HANDLE hCommSocket //套接字句柄
//返回值:無
 /**/////////////////////////////////////////////////////////////////////////// void __stdcall CommSocketClose(HANDLE hCommSocket)
  {
PSOCKET_HANDLE pHandle = (PSOCKET_HANDLE)hCommSocket;
closesocket(pHandle->m_socket);
pHandle->m_socket = INVALID_SOCKET;
delete pHandle;
pHandle = NULL;
}



|
|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
27 | 28 | 29 | 30 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|
常用鏈接
留言簿(3)
隨筆分類(81)
隨筆檔案(86)
文章分類(34)
文章檔案(37)
c++博客
技術論壇
網絡安全和黑客技術
資源
搜索
積分與排名
最新評論

閱讀排行榜
評論排行榜
|
|