📄 socketobject.cpp
字号:
#include"SocketObject.h"
SocketObject::SocketObject()
{
WSADATA wsaData;
WORD wVersionRequested;
wVersionRequested=MAKEWORD(2,2);
skSocket=INVALID_SOCKET;
WSAStartup(wVersionRequested,&wsaData);
}
SocketObject::~SocketObject()
{
Disconnect();
//WSACleanup();
}
bool SocketObject::Create(AF af,SOCKTYPE socktype,PROTOCAL protocal)
{
skSocket=socket(af,socktype,protocal);
if(skSocket==INVALID_SOCKET)
return false;
return true;
}
bool SocketObject::Bind(int iPort)
{
char hostname[128];
sockaddr_in saServerAddress;
hostent* pHostIP;
if(skSocket==INVALID_SOCKET)
return false;
memset(&saServerAddress,0,sizeof(saServerAddress));
gethostname(hostname,sizeof(hostname));
pHostIP=gethostbyname(hostname);
saServerAddress.sin_family=AF_INET;
saServerAddress.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
saServerAddress.sin_port=htons(iPort);
//saServerAddress.sin_addr=*(in_addr*)pHostIP->h_addr_list[0];
if(bind(skSocket,(sockaddr*)&saServerAddress,sizeof(sockaddr))==SOCKET_ERROR)
{
Disconnect();
return false;
}
return true;
}
void SocketObject::Disconnect()
{
if(skSocket!=INVALID_SOCKET)
{
shutdown(skSocket,SD_BOTH); //SD_RECEIVE SD_SEND SD_BOTH
closesocket(skSocket);
skSocket=INVALID_SOCKET;
}
}
bool SocketObject::Listen(int waitnum)
{
if(listen(skSocket,waitnum)==0)
return true;
return false;
}
bool SocketObject::Accept(SocketObject &skAcceptSocket)
{
iClientSize=sizeof(sockaddr_in);
skAcceptSocket.skSocket=accept(skSocket,(sockaddr*)&saClientAddress,&iClientSize);
if(skAcceptSocket.skSocket==INVALID_SOCKET)
return false;
return true;
}
bool SocketObject::Connect(char *szServerAddress, int iPort)
{
sockaddr_in serv_addr;
LPHOSTENT lpHost;
//int err;
//skSocket=socket(AF_INET,SOCK_STREAM,0);
//if(skSocket==INVALID_SOCKET)
// return false;
memset(&serv_addr,0,sizeof(sockaddr_in));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.S_un.S_addr=inet_addr(szServerAddress);
if(serv_addr.sin_addr.S_un.S_addr==INADDR_NONE)
{
lpHost=gethostbyname(szServerAddress);
if(lpHost!=NULL)
{
serv_addr.sin_addr.S_un.S_addr=((LPIN_ADDR)lpHost->h_addr_list[0])->S_un.S_addr;
}
else
return false;
}
serv_addr.sin_port=htons(iPort);
if(connect(skSocket,(sockaddr*)&serv_addr,sizeof(sockaddr))==SOCKET_ERROR)
{
Disconnect();
return false;
}
return true;
}
int SocketObject::Send(char *szBuffer, int iBuflen, int iFlags)
{
return send(skSocket,szBuffer,iBuflen,iFlags);
}
int SocketObject::Sendto(char* szBuffer,int iBuflen,char* addr,int port)
{
sockaddr_in toAddr;
LPHOSTENT lpHost;
memset(&toAddr,0,sizeof(sockaddr_in));
toAddr.sin_family=AF_INET;
toAddr.sin_addr.S_un.S_addr=inet_addr(addr);
if(toAddr.sin_addr.S_un.S_addr==INADDR_NONE)
{
lpHost=gethostbyname(addr);
if(lpHost!=NULL)
{
toAddr.sin_addr.S_un.S_addr=((LPIN_ADDR)lpHost->h_addr_list[0])->S_un.S_addr;
}
else
return false;
}
toAddr.sin_port=htons(port);
return sendto(skSocket,szBuffer,iBuflen,0,(sockaddr*)(&toAddr),sizeof(sockaddr_in));
}
int SocketObject::Recv(char *szBuffer, int iBuflen, int iFlags)
{
return recv(skSocket,szBuffer,iBuflen,iFlags);
}
int SocketObject::Recvfrom(char *szBuffer, int iBuflen)
{
sockaddr_in fromAddr;
int fromlen=sizeof(fromAddr);
return recvfrom(skSocket,szBuffer,iBuflen,0,(sockaddr*)(&fromAddr),&fromlen);
}
bool SocketObject::Setsockopt(int level, int optname, const char *optval, int optlen)
{
if(setsockopt(skSocket,level,optname,optval,optlen)==SOCKET_ERROR)
return false;
return true;
}
string SocketObject::GetIP()
{
return inet_ntoa(saClientAddress.sin_addr);
}
bool SocketObject::isAvailable()
{
if(skSocket!=INVALID_SOCKET)
return true;
else
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -