这是一个服务器端的类,采用的是tcp传输
服务端 客户机
socket()
bind()
listen() socket()
accept()
阻塞.等待客户 connect()
read() write()
处理服务请求
write() read()
close() close()
/*
*******************************************************
2004 12 06
stephen
*******************************************************
*/
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#define maxsize 50
#define wm_receivedata wm_user+1002
class cnetserver
{
public:
cnetserver();
cnetserver(int port);
~cnetserver();
//读数据
static dword winapi threadserver(lpvoid n);
//初始化服务器
bool initnetserver();
// 发送到指定的客户端
bool senddatatoclient(int nclient,char* data,int len);
// 发送到所有的客户端
bool senddatatoclient(char* data,int len);
//指定接收数据的窗口句柄
inline void sethwnd(hwnd hwnd)
{
m_hwnd = hwnd;
}
int getcount();
// 返回错误信息
char* getlasterror();
//关闭服务器
void closeserver();
//关闭服务器
void destoryserver();
private:
handle hthread;
hwnd m_hwnd;
int port;
char szerror[256];
char getdata[256];
int nreceive;
int addlen;
socket sock;
socket clientsocket[maxsize];
sockaddr_in servaddr;
wsadata wsdata;
};
cnetserver::cnetserver()
{
this->sock = invalid_socket;
this->hthread=null;
this->port = 9999;
for(int i=0;i<maxsize;i++)
{
clientsocket[i] = invalid_socket;
}
}
cnetserver::cnetserver(int port)
{
this->sock = invalid_socket;
this->hthread=null;
this->port = port;
for(int i=0;i<maxsize;i++)
{
clientsocket[i] = invalid_socket;
}
}
cnetserver::~cnetserver()
{
this->destoryserver();
}
char* cnetserver::getlasterror()
{
return this->szerror;
}
bool cnetserver::initnetserver()
{
if(wsastartup(makeword(1,1),&this->wsdata) != 0)
{
wsprintf(this->szerror,text("wsastartup failed.error:%d"),wsagetlasterror());
return false;
}
this->servaddr.sin_addr.s_addr = htonl(inaddr_any);
this->servaddr.sin_family = af_inet;
this->servaddr.sin_port = htons(this->port);
this->addlen = sizeof(servaddr);
sock = socket(af_inet,sock_stream,0);
if( sock == socket_error)
{
wsprintf(this->szerror,text("bind failed.error:%d"),wsagetlasterror());
return false;
}
if(bind(sock,(sockaddr*)&servaddr,sizeof(servaddr)) == socket_error)
{