📄 tcpsocket.cpp
字号:
#include "StdAfx.h"
#include ".\tcpsocket.h"
TCPSocket::TCPSocket(void)
{
Init();//初始化
}
TCPSocket::~TCPSocket(void)
{
this->Close();//关闭套接字
WSACleanup(); //卸载相关库
}
bool TCPSocket::Init(void)
{
int Error;
WORD VersionRequested;
WSADATA WsaData;
VersionRequested=MAKEWORD(2,2);//版本号协商
Error=WSAStartup(VersionRequested,&WsaData); //初始化WinSock2
if(Error!=0)
{
return FALSE;
}
else
{
if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)
{
WSACleanup();
return FALSE;
}
}
return TRUE;
}
int TCPSocket::Create(int port)
{
sockaddr_in local;
local.sin_addr.s_addr = INADDR_ANY;
local.sin_family = AF_INET;
local.sin_port = htons(port);
if((m_socket = socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET)//创建socket
{
return WSAGetLastError();
}
if((bind(m_socket,(struct sockaddr*)&local,sizeof(local)))==SOCKET_ERROR)//socket绑定
{
return WSAGetLastError();
}
return true;
}
int TCPSocket::Send(const char* buf, int len)//发送数据
{
if(buf==NULL||len==0)
return -1;
if((send(m_socket,buf,len,0))==SOCKET_ERROR)
{
return WSAGetLastError();
}
return 0;
}
int TCPSocket::Recv(char* buf, int len)//数据接收
{
if(buf==NULL)
return -1;
int ret;
ret = recv(m_socket,buf,len,0);
if(ret==SOCKET_ERROR)
{
return WSAGetLastError();
}
return ret;
}
int TCPSocket::Accept(TCPSocket* cs)//接受新的连接,cs为新创建的Socket
{
struct sockaddr_in addr;
int len = sizeof(addr);
cs->m_socket = accept(m_socket,(struct sockaddr*)&addr,&len);
return 0;
}
int TCPSocket::Connect(char* ip, int port)//连接指定IP和端口的目标主机
{
if(strlen(ip)==0||port==0)
return -1;
struct sockaddr_in addr;
addr.sin_addr.S_un.S_addr =inet_addr(ip);
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
connect(m_socket,(struct sockaddr*)&addr,sizeof(addr));
return WSAGetLastError();
}
int TCPSocket::Listen(int num)//监听
{
if(num==0) return -1;
return listen(m_socket,num);
}
int TCPSocket::Close(void)//关闭套接字
{
return closesocket(m_socket);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -