C++编程之一:封装socket连接dll


#include "WinSock2.h"
#include <stdio.h>
#include <string>
using namespace std;
#define LRDLLTEST_API __declspec(dllexport)
extern "C" LRDLLTEST_API int ReceiveData(unsigned int m_DataSocket, char *DataBuf, int nlength);
extern "C" LRDLLTEST_API int Close(unsigned int m_DataSocket);
extern "C" LRDLLTEST_API unsigned int Connect(char * ulAddress, int iPort);
extern "C" LRDLLTEST_API int SendData( unsigned int m_DataSocket,char* pcData, int iLength);

#include "stdafx.h"
#include "SocketInter.h"

int ReceiveData(unsigned int m_DataSocket, char *DataBuf, int nlength)
{
memset( DataBuf, 0x00, nlength);
return recv(m_DataSocket , DataBuf, nlength, 0);

}

int Close(unsigned int m_DataSocket)
{
closesocket(m_DataSocket);
WSACleanup();
return TRUE;
}

unsigned int Connect(char * ulAddress, int iPort)
{
struct sockaddr_in serv_addr;
//加载套接字
WORD wVersionRequested;
WSADATA wsaData;
int err;
SOCKET m_DataSocket;
wVersionRequested = MAKEWORD(1,1);
err = WSAStartup(wVersionRequested,&wsaData);
if(err != 0)
{
   return FALSE;
}
if (LOBYTE(wsaData.wVersion) != 1 ||HIBYTE(wsaData.wVersion)!=1)
{
   WSACleanup();
   return FALSE;
}
if ((m_DataSocket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{  
   cout << "创建socket号失败!" <<endl;
        return FALSE;  
}

serv_addr.sin_family = AF_INET;  
    serv_addr.sin_port = htons(iPort);   
serv_addr.sin_addr.s_addr = inet_addr( ulAddress );

if (connect(m_DataSocket, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1)
{       
   cout << "连接服务器失败!" <<endl;
   return FALSE;  
    }
return m_DataSocket;
}

int SendData( unsigned int m_DataSocket,char* pcData, int iLength)
{
int iData = send(m_DataSocket, pcData, iLength, 0) ;
if( iData <= 0 )
{
   cout<< "数据发送失败!请确认!" <<endl;
}
return iData;
}


return recv(m_DataSocket , DataBuf, nlength, 0);

}

int Close(unsigned int m_DataSocket)

{

closesocket(m_DataSocket);

WSACleanup();

return TRUE;

}

unsigned int Connect(char * ulAddress, int iPort)

{

struct sockaddr_in serv_addr;

//加载套接字

WORD wVersionRequested;

WSADATA wsaData;

int err;
SOCKET m_DataSocket;
wVersionRequested = MAKEWORD(1,1);
err = WSAStartup(wVersionRequested,&wsaData);
if(err != 0)
{
   return FALSE;
}
if (LOBYTE(wsaData.wVersion) != 1 ||HIBYTE(wsaData.wVersion)!=1)
{
   WSACleanup();
   return FALSE;
}
if ((m_DataSocket = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{  
   cout << "创建socket号失败!" <<endl;
        return FALSE;  
}

serv_addr.sin_family = AF_INET;  
    serv_addr.sin_port = htons(iPort);   
serv_addr.sin_addr.s_addr = inet_addr( ulAddress );

if (connect(m_DataSocket, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1)
{       
   cout << "连接服务器失败!" <<endl;
   return FALSE;  
    }
return m_DataSocket;
}


int SendData( unsigned int m_DataSocket,char* pcData, int iLength)
{
int iData = send(m_DataSocket, pcData, iLength, 0) ;
if( iData <= 0 )
{
   cout<< "数据发送失败!请确认!" <<endl;
}
return iData;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值