#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 协议
);
}
}
};
#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 协议
);
}
}
};