资源简介

使用滑动窗口机制实现可靠性传输,适合于学网络的朋友们,算法经典,根据网上别人的代码修改

资源截图

代码片段和文件信息

#include “stdafx.h“
#include “.\hsocket.h“

CHsocket::CHsocket(CHsocket& hsocket) : m_socket(hsocket.m_socket)
{

}

CHsocket::CHsocket(SOCKET socket) : m_socket(socket)
{

}

CHsocket::CHsocket()
{
m_socket = INVALID_SOCKET;
}

CHsocket::~CHsocket()
{
}

bool CHsocket::StartSock()
{
WSADATA wsaData;
int ret = WSAStartup(MAKEWORD(2 2) &wsaData);
if(ret == SOCKET_ERROR)
{
// cout << “网络初化失败“ << endl;
return false;
}

return true;
}

bool CHsocket::hsocket(unsigned int port int type const char* address)
{
m_socket = socket(AF_INET type 0);
if(m_socket == SOCKET_ERROR)
{
// cout << “socket error“ << endl;
return false;
}

if(port == 0)// if nPort is zero only create a socket not bind
return true;

makesendsockaddr(address port);

int ret = bind(m_socket (struct sockaddr*)&m_sendsockaddr sizeof(m_sendsockaddr));
if(ret == SOCKET_ERROR)
{
// cout << “bind error“ << endl;
return false;
}

return true;
}

int CHsocket::hconnect(char* address unsigned int port)
{
struct sockaddr_in sockaddr;
memset(&sockaddr 0 sizeof(sockaddr));
sockaddr.sin_addr.s_addr = inet_addr(address);
sockaddr.sin_family = AF_INET;
sockaddr.sin_port = htons(port);
return connect(m_socket (struct sockaddr*)&sockaddr sizeof(sockaddr));
}

int CHsocket::hlisten(int backlog)
{
return listen(m_socket backlog);
}

SOCKET CHsocket::haccept()
{
struct sockaddr_in sockaddr;
int addrlen = sizeof(sockaddr);

memset(&sockaddr 0 sizeof(sockaddr));

return accept(m_socket (struct sockaddr*)&sockaddr &addrlen);
}

int CHsocket:: hsend(const char* buf int len)
{
return send(m_socket buf len 0);
}

int CHsocket::hrecv(char* buf int len)
{
return recv(m_socket buf len 0);
}

int CHsocket::hsendto(const char* buf int len const sockaddr* to)
{
return sendto(m_socket buf len 0 to sizeof(m_sockaddr));
}

int CHsocket::hsendto(const char* buf int len)
{
return sendto(m_socket buf len 0 (struct sockaddr*)&m_sendsockaddr sizeof(m_sendsockaddr));
}

int CHsocket::hrecvfrom(char* buf int len sockaddr* from)
{
int sockaddrlen = sizeof(m_sockaddr);

return recvfrom(m_socket buf len 0 from &sockaddrlen);
}

int CHsocket::hrecvfrom(char* buf int len)
{
int sockaddrlen = sizeof(m_sockaddr);

return recvfrom(m_socket buf len 0 (struct sockaddr*)&m_sockaddr &sockaddrlen);
}

int CHsocket::hclosesocket()
{
return closesocket(m_socket);
}

int CHsocket::CleanSock()
{
return WSACleanup();
}

SOCKET CHsocket::operator *()
{
return m_socket; 
}

CHsocket& CHsocket::operator =(CHsocket& hsocket)
{
if(this == &hsocket)
return *this;

m_socket = hsocket.m_socket;
memcpy(&m_sockaddr &hsocket.m_sockaddr sizeof(m_sockaddr));
memcpy(&m_sendsockaddr &hsocket.m_sendsockaddr sizeof(m_sendsockaddr));
m_straddr = hsocket.m_straddr;
return *this;
}

void CHsocket::make

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2010-01-06 14:14  Hsocket\
     文件        5367  2004-12-10 15:13  Hsocket\Hsocket.cpp
     文件        1693  2004-12-07 01:51  Hsocket\Hsocket.h
     目录           0  2010-01-06 14:14  UDPTrsmtFile\
     文件       13586  2004-12-14 01:58  UDPTrsmtFile\UDPTrsmtFile.cpp
     文件        4059  2004-12-14 01:53  UDPTrsmtFile\UDPTrsmtFile.h

评论

共有 条评论