由于C socket的使用对命名使用很不方便,所以对其进行了简单的封装,代码如下:
class IPAddress


{
public:
struct sockaddr_in address;
public:
IPAddress()

{
address.sin_addr.S_un.S_addr=INADDR_ANY;
address.sin_family=AF_INET;
address.sin_port=htons(0);
}

IPAddress(char* ip,int port)

{
address.sin_addr.S_un.S_addr=inet_addr(ip);
address.sin_family=AF_INET;
address.sin_port=htons(port);
}

sockaddr_in GetAddress()

{
return address;
}

char* GetIP()

{
return inet_ntoa(address.sin_addr);
}
int GetPort()

{
return address.sin_port;
}

};



class TcpClient


{
public:
IPAddress addr;
IPAddress remoteAddr;
int sockflag;
bool success;
public:
TcpClient()

{
success=true;
sockflag=socket(AF_INET,SOCK_STREAM,0);
if(sockflag==-1)

{
success=false;
return;
}
if(bind(sockflag,(struct sockaddr*)&addr.GetAddress(),sizeof(struct sockaddr_in))==-1)
success=false;
}

TcpClient(int sf)

{
sockflag=sf;
}

char* GetRemoteIP()

{
return remoteAddr.GetIP();
}

int GetRemotePort()

{
return remoteAddr.GetPort();
}

void SetRemoteAddress(struct sockaddr_in remote)

{
remoteAddr.address.sin_addr.S_un.S_addr=remote.sin_addr.S_un.S_addr;
remoteAddr.address.sin_family=remote.sin_family;
remoteAddr.address.sin_port=remote.sin_port;
}


bool Connect(char* ip,int port)

{
remoteAddr.address.sin_addr.S_un.S_addr=inet_addr(ip);
remoteAddr.address.sin_family=AF_INET;
remoteAddr.address.sin_port=htons(port);

int sin_size=sizeof(struct sockaddr_in);
if(connect(sockflag,(struct sockaddr*)&remoteAddr,sin_size)==-1)
return false;
else
return true;

}

int Send(char* msg,int len)

{
int l = send(sockflag,msg,len,0);
return l;
}

int Receive(char* buf,int len)

{
return recv(sockflag,buf,len,0);
}
bool Close()

{
if(shutdown(sockflag,2)==-1)
return false;
else
return true;
}

};




class TcpListener


{
private:
int sockflag;
bool success;
public:
TcpListener(IPAddress addr)

{
success=true;
sockflag=socket(AF_INET,SOCK_STREAM,0);
if(sockflag==-1)

{
success=false;
return;
}
if(bind(sockflag,(struct sockaddr*)&addr.GetAddress(),sizeof(struct sockaddr_in))==-1)
success=false;
}

bool Listen()

{
if(listen(sockflag,20)==-1)
return false;
else
return true;
}

TcpClient Accept()

{
struct sockaddr_in remote;
int remoteSize=sizeof(struct sockaddr_in);
int newSock = accept(sockflag,(struct sockaddr*)&remote,&remoteSize);
TcpClient c(newSock);

c.SetRemoteAddress(remote);

return c;

}

bool Close()

{
if(shutdown(sockflag,2)==-1)
return false;
else
return true;

}


};




