wsprintf(this->szerror,text("bind failed.error:%d"),wsagetlasterror());
return false;
}
else
{
listen(sock,5);
hthread = createthread(null,0,cnetserver::threadserver,this,0,null);
return true;
}
}
int cnetserver::getcount()
{
for( int i =0;i<maxsize;i++)
{
if(clientsocket[i] == invalid_socket)
return i;
}
return -1;
}
dword winapi cnetserver::threadserver(lpvoid n)
{
cnetserver* pserver = (cnetserver*)n;
char buff[1024] = "";
int rev = 1,flag = 0;
int clientcount=-1;
clientcount = pserver->getcount();
if(clientcount == -1)
{
return 0l;
}
else
{
rev = 1;
pserver->clientsocket[clientcount] =
accept(pserver->sock,(sockaddr*)&(pserver->servaddr),
&pserver->addlen);
if( pserver->clientsocket[clientcount] == invalid_socket)
{
wsprintf(pserver->szerror,text("accept failed.error:%d"),wsagetlasterror());
return 0l;
}
else
{
::createthread(null,0,cnetserver::threadserver,pserver,0,null);
while(rev != socket_error)
{
rev = recv(pserver->clientsocket[clientcount],
buff,1024,0);
if(rev != socket_error)
{
//::sendmessage(pserver->m_hwnd,wm_receivedata,0,(lparam)buff);
messagebox(null,(lpctstr)buff,"receivedata",0);
}
}
}
}
return 1;
}
bool cnetserver::senddatatoclient(int nclient,char* data,int len)
{
int i=0;
if(sock == invalid_socket)
return false;
if(clientsocket[nclient] == invalid_socket)
return false;
if(send(clientsocket[nclient],data,len,0) == socket_error)
{
wsprintf(this->szerror,text("send failed.error:%d"),wsagetlasterror ());
return false;
}
return true;
}
bool cnetserver::senddatatoclient(char* data,int len)
{
for(int i=0;i<maxsize;i++)
{
if(clientsocket[i] != invalid_socket)
if(send(clientsocket[i],data,len,0) == socket_error)
{
wsprintf(this->szerror,text("send failed.error:%d"),wsagetlasterror ());
return false;
}
}
}
void cnetserver::closeserver()
{
waitforsingleobject(this->hthread,infinite);
for(int i=0;i<maxsize;i++)
{
if(clientsocket[i] !=invalid_socket)
closesocket(clientsocket[i]);
}
wsacleanup();
}
void cnetserver::destoryserver()
{
dword exitcode=0;
getexitcodethread(this->hthread,&exitcode);
terminatethread(this->hthread,exitcode);
for(int i=0;i<maxsize;i++)
{
if(clientsocket[i] !=invalid_socket)
closesocket(clientsocket[i]);
wsacleanup();
}
}
/*
********************************************************************************
test
********************************************************************************
*/
#include "stdafx.h"
#include <iostream.h>
#include <string>
#include "netserver.h"
int main()
{
cnetserver net(9999);
if(net.initnetserver()==false)
cout<<"initnetserver"<<net.getlasterror()<<endl;
char data[1024]="";
while(cin>>data !="exit")
{
net.senddatatoclient(data,sizeof(data));
net.senddatatoclient(1,data,sizeof(data));
}
net.closeserver();
}
/*
可用telnet 127.0.0.1 9999 测试,也可用cnet测试, 不当之处,欢迎指点