18,356
社区成员
发帖
与我相关
我的任务
分享
WSADATA wsaData;
nRet = WSAStartup(MAKEWORD(2,2), &wsaData);
if(nRet != NO_ERROR)
{
err = WSAGetLastError();
return -1;
}
//创建监听socket
SOCKET ListenSocket;
ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if(ListenSocket == INVALID_SOCKET)
{
err = WSAGetLastError();
WSACleanup();
return -1;
}
int port = 8001;
int iAddrSize;
//添地址
sockaddr_in local;
local.sin_family = AF_INET;
local.sin_addr.s_addr = htonl(INADDR_ANY);//inet_addr("127.0.0.1");
local.sin_port = htons(port);
iAddrSize = sizeof(local);
//绑定
if(bind(ListenSocket, (SOCKADDR*)&local, iAddrSize) == SOCKET_ERROR)
{
err = WSAGetLastError();
closesocket(ListenSocket);
WSACleanup();
return -1;
}
//开始侦听
if(listen(ListenSocket, SOMAXCONN) != 0)
{
err = WSAGetLastError();
closesocket(ListenSocket);
WSACleanup();
return -1;
}
while (1)
{
// 创建一个接受连接请求的端口
SOCKET* pClient = new SOCKET;
*pClient = accept(ListenSocket, (SOCKADDR*)&local,&iAddrSize);
if(*pClient == INVALID_SOCKET)
{
err = WSAGetLastError();
closesocket(ListenSocket);
WSACleanup();
return -1;
}
DWORD dwCheckOnlineStatusThreadID1;
//ClientSocket = AcceptSocket;
SClientSocketInfo *pClientSocketInfo=new SClientSocketInfo;
pClientSocketInfo->ClientSocket= *pClient;
pClientSocketInfo->csIp = csStationIp;
pClientSocketInfo->csPort = csStationPort;
m_DbAdmin->m_ListClientSocketInfo.AddHead(pClientSocketInfo);
m_hCheckOnlineStatusThread1 = CreateThread(NULL,0,CallBackCheckOnlineStatus1,this,0,&dwCheckOnlineStatusThreadID1);
if(m_hCheckOnlineStatusThread1 == NULL)
{
//AfxMessageBox("创建在线检测线程失败!");
closesocket(ListenSocket);
WSACleanup();
return -1;
}
}
closesocket(ListenSocket);
WSACleanup();
DWORD WINAPI CallBackCheckOnlineStatus1(LPVOID lpParameter ) // thread data
{
CDoc *pDoc = (CDoc*)lpParameter;
int iResult, iSendResult;
unsigned char buf[21];
int len = 21;
memset(buf,0,len);
POSITION pos = pDoc->m_DbAdmin->m_ListClientSocketInfo.GetHeadPosition();
while(pos != NULL)
{
SClientSocketInfo *pClientSocketInfo = (SClientSocketInfo*)pDoc->m_DbAdmin->m_ListClientSocketInfo.GetNext(pos);
sockaddr_in ClientLocal;
int iClientAddrSize = sizeof(ClientLocal);
iResult = getpeername(pClientSocketInfo->ClientSocket , (SOCKADDR*)&ClientLocal,&iClientAddrSize);
//sprintf((char *)buf, "客户端的IP地址:%s,端口号:%d ", inet_ntoa(ClientLocal.sin_addr),ntohs(ClientLocal.sin_port));
if (0 == iResult)
{
iResult = recv(pClientSocketInfo->ClientSocket,(char *)buf, len, 0);
if (iResult > 0)
{
}
closesocket(pClientSocketInfo->ClientSocket);
WSACleanup();
//delete pClientSocketInfo;
}
return FALSE;
}