winsocket

#include <winsock2.h>
#include <ws2tcpip.h>
#include <fcntl.h>
#include <cstdio>
#include <cstdlib>
#pragma comment(lib ,"ws2_32")
//接收缓冲区大小 
#define RECV_BUFF_SIZE 1000 
//发送缓冲区大小 
#define SEND_BUFF_SIZE 1000 
//IP字符串数组大小 
#define IP_SIZE 30 
//listen缓冲区大小 
#define MAX_SERVICE 5
WSADATA wsaData;
void Socket_init(){
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=NO_ERROR)
std::cout<<"Error at WSAStartup"<<std::endl;
}
void Socket_uinit(){
WSACleanup();
}
class CSocket{
public:
SOCKET m_socket;
SOCKET m_accept_socket;
int m_port;
char m_ip[IP_SIZE];
char m_recv_buff[RECV_BUFF_SIZE];
char m_send_buff[SEND_BUFF_SIZE];
SOCKADDR_IN m_addr;
CSocket(char *ip,int port):m_port(port){
strcpy(m_ip,ip);
}
CSocket(SOCKET sk):m_socket(sk){

}
CSocket(){

}
~CSocket(){
}
void SetIp(char * ip){
strcpy(m_ip,ip);
}
void SetSocket(SOCKET m){
m_socket=m;
}
void SetPort(int m)
{
m_port=m;
}
void Init(int mode=1)
{
SetModeSocket(mode%2);
if(m_socket==INVALID_SOCKET)
{
std::cout<<"m_socket error"<<std::endl;
system("PAUSE");
}
m_addr.sin_family = AF_INET ; // IPv4
m_addr.sin_addr.s_addr=inet_addr(m_ip); //服务器IP 
m_addr.sin_port=htons(m_port); //端口
memset(m_addr.sin_zero,0,sizeof(m_addr.sin_zero));
}
void UnInit()
{
closesocket(m_socket);
}
virtual void Bind()
{
if(bind(m_socket,(SOCKADDR *) &m_addr,sizeof(m_addr))==SOCKET_ERROR)//绑定到本机网络地址 端口 也就是网卡上
std::cout<<"Error at bind"<<std::endl;
}
virtual void Listen()
{
if(listen(m_socket,MAX_SERVICE)==SOCKET_ERROR) //开始监听客户端连接请求 
std::cout<<"Error at listen"<<std::endl;
}
virtual void Connect(){
if(connect(m_socket //socket
, (SOCKADDR *) &m_addr //地址
  , sizeof(m_addr) //地址大小
  )==SOCKET_ERROR)
std::cout<<"Error at connect"<<std::endl;
}
virtual int Send(char * str)
{
if(lstrlen(str)+1>SEND_BUFF_SIZE)
{
std::cout<<"发送超过缓存空间"<<std::endl;
return 0;
}
strcpy(m_send_buff,str);
if(!send(m_socket,m_send_buff,lstrlen(str)+1,0))
{
std::cout<<"Error at send"<<std::endl;
return 0;
}
return 1;
}
virtual int SendTo(char* str)
{
if(lstrlen(str)+1>SEND_BUFF_SIZE)
{
std::cout<<"发送超过缓存空间"<<std::endl;
return 0;
}
strcpy(m_send_buff,str);
if(!sendto(m_socket,m_send_buff,lstrlen(str)+1,0,(SOCKADDR *) &m_addr,sizeof(m_addr)))
{
std::cout<<"Error at send"<<std::endl;
return 0;
}
return 1;
}
virtual int RecvFrom(SOCKADDR_IN addr)
{
addr=m_addr;
if(recvfrom(m_socket,m_recv_buff,RECV_BUFF_SIZE,0,(SOCKADDR *)&addr,0)<0)
{
std::cout<<"Socket错误,客户端可能关闭连接\n"<<std::endl;
return 0;
}
return 1;
}
virtual int Recv()
{
if(recv(m_socket,m_recv_buff,RECV_BUFF_SIZE,0)<=0)
{
std::cout<<"Socket错误,客户端可能关闭连接\n"<<std::endl;
return 0;
}
return 1;
}
virtual bool Accept()
{
m_accept_socket=accept(m_socket,NULL,NULL);
return true;
}
SOCKET ReturnAccept_socket()
{
return m_accept_socket;
}
int ReturnPort()
{
return m_port;
}
char* ReturnIp()
{
return m_ip;
}
void ShowRecv_buff()
{
printf("%s\n",m_recv_buff);
}
void ShowSend_buff()
{
printf("%s\n",m_send_buff);
}
private:
void SetModeSocket(int mode=1)
{
if(mode==1)
{
m_socket=socket(AF_INET //IPv4
, SOCK_STREAM //数据流 
, IPPROTO_TCP //TCP 协议 
);
}
else
{
m_socket=socket(AF_INET //IPv4
, SOCK_STREAM //数据流 
, IPPROTO_UDP //UDP 协议 
);
}
}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值