#include "stdafx.h"
#include <stdio.h>
#include "wsocket.h"
#ifdef WIN32
#pragma comment(lib, "wsock32.lib")
#endif
WSocket::WSocket(SOCKET sock)
{
m_sock = sock;
}
WSocket::~WSocket()
{
Close();
}
int WSocket::Init()
{
#ifdef WIN32
WSADATA wsaData;
WORD version = MAKEWORD(2, 2);
int ret = WSAStartup(version, &wsaData);
if ( ret ) {
OutputDebugStringA("Initilize winsock error !");
return -1;
}
#endif
return 0;
}
int WSocket::Clean()
{
#ifdef WIN32
return (WSACleanup());
#endif
return 0;
}
WSocket& WSocket::operator = (SOCKET s)
{
m_sock = s;
return (*this);
}
WSocket::operator SOCKET ()
{
return m_sock;
}
bool WSocket::Create(int af, int type, int protocol)
{
m_sock = socket(af, type, protocol);
if ( m_sock == INVALID_SOCKET ) {
return false;
}
return true;
}
bool WSocket::Connect(const char* ip, unsigned short port)
{
SOCKADDR_IN svraddr;
svraddr.sin_family = AF_INET;
svraddr.sin_addr.s_addr = inet_addr(ip);
svraddr.sin_port = htons(port);
int ret = connect(m_sock, (sockaddr*)&svraddr, sizeof(svraddr));
if ( ret == SOCKET_ERROR ) {
return false;
}
return true;
}
bool WSocket::Bind(unsigned short port)
{
SOCKADDR_IN svraddr;
svraddr.sin_family = AF_INET;
svraddr.sin_addr.s_addr = INADDR_ANY;
svraddr.sin_port = htons(port);
//////////////////////////////////
int opt = 1;
if ( setsockopt(m_sock, SOL_SOCKET, SO_REUSEADDR, (char*)&opt, sizeof(opt)) < 0 )
return false;
//////////////////////////////////
int ret = bind(m_sock, (sockaddr*)&svraddr, sizeof(svraddr));
if ( ret == SOCKET_ERROR ) {
return false;
}
return true;
}
bool WSocket::Listen(int backlog)
{
int ret = listen(m_sock, backlog);
if ( ret == SOCKET_ERROR ) {
return false;
}
return true;
}
bool WSocket::Accept(WSocket& s, char* fromip)
{
SOCKADDR_IN cliaddr;
int addrlen = sizeof(cliaddr);
SOCKET sock = accept(m_sock, (SOCKADDR*)&cliaddr, &addrlen);
if ( sock == SOCKET_ERROR ) {
return false;
}
s = sock;
if ( fromip != NULL )
sprintf(fromip, "%s", inet_ntoa(cliaddr.sin_addr));
return true;
}
int WSocket::Send(const char* buf, int len, int flags)
{
int bytes;
int count = 0;
while ( count < len ) {
bytes = send(m_sock, buf + count, len - count, flags);
if ( bytes == -1 || bytes == 0 )
return -1;
count += bytes;
}
return count;
}
int WSocket::Recv(char* buf, int len, int flags)
{
return (recv(m_sock, buf, len, flags));
// if(ret == 0 || ret == SOCKET_ERROR || WSAGetLastError() == WSAECONNRESET)
// {
// //DisConnect();
// return ;
// }
}
int WSocket::Close()
{
#ifdef WIN32
return (closesocket(m_sock));
#else
return (close(m_sock));
#endif
}
int WSocket::GetError()
{
#ifdef WIN32
return (WSAGetLastError());
#else
return (errno);
#endif
}
bool WSocket::DnsParse(const char* domain, char* ip)
{
hostent* p;
if ( (p = gethostbyname(domain)) == NULL )
return false;
sprintf(ip,
"%u.%u.%u.%u",
(unsigned char)p->h_addr_list[0][0],
(unsigned char)p->h_addr_list[0][1],
(unsigned char)p->h_addr_list[0][2],
(unsigned char)p->h_addr_list[0][3]);
return true;
}
入门级 Socket TCP封装
需积分: 50 20 浏览量
2018-10-30
15:21:21
上传
评论 1
收藏 2KB RAR 举报
diybossdiy
- 粉丝: 0
- 资源: 2
最新资源
- 基于matlab实现用有限元法计算电磁场的Matlab工具 .rar
- 基于matlab实现有限元算法 计算电磁场问题 边界条件包括第一类边界和第二类边界.rar
- 基于matlab实现用于计算不同车重下的电动汽车动力性和经济性.rar
- 基于matlab实现遗传算法求解多车场车辆路径问题 有多组算例可以用.rar
- 浏览器.apk
- 基于matlab实现是一个matlab中的power system 中搭建的一个模型
- 基于JSP毕业设计-教学管理系统(源代码+论文).zip
- 基于JSP毕业设计-家政管理系统-毕业设计.zip
- 基于Python实现淘宝商品评论采集(含逆向)源代码
- 基于matlab实现多目标进化算法NSGAⅡ&Matlab讲解.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈