64,282
社区成员
发帖
与我相关
我的任务
分享
//#include <windows.h>
#include <iostream>
#include <winsock2.h>
#include "WinSocket.h"
#pragma comment(lib,"Ws2_32.lib")
using namespace std;
const u_long PORT = 5555;
HANDLE hHand;
DWORD WINAPI doAcceptConnect(WinSocket &winSocket);
int main()
{
WinSocket winSocket;
if(winSocket.InitSocketLib())
{
return 0;
}
SOCKADDR_IN serverSockAddr;
serverSockAddr.sin_addr.S_un.S_addr = htons(INADDR_ANY);
serverSockAddr.sin_family = AF_INET;
serverSockAddr.sin_port = htons(PORT);
if(!winSocket.CreateSocket())
{
return 0;
}
if(!winSocket.BindSocket(serverSockAddr))
{
return 0;
}
if(!winSocket.ListenSocket(2))
{
return 0;
}
/* if(!winSocket.AcceptSocket())
{
return 0;
}*/
hHand = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)doAcceptConnect,NULL,0,NULL);
while(1)
{
Sleep(500);
}
}
DWORD WINAPI doAcceptConnect(WinSocket &winSocket)
{
while(true)
{
if(!winSocket.AcceptSocket())
{
return 0;
}
char *buffer = new char[255];
if(!winSocket.ReceiveSocket(&buffer))
{
return 1;
}
cout<<buffer<<endl;
}
return 0;
}
/**
*create a sokcet server or client
**/
#ifndef WINSOCKET_H
#define WINSOCKET_H
#pragma once
//#include <windows.h>
#include <winsock2.h>
#include <iostream>
using namespace std;
#pragma comment(lib,"Ws2_32.lib")
const int SUCCESS = 1;
const int MAXBUFLEN = 256;
const int NO_FLAGS_SET = 0;
class WinSocket
{
public:
WinSocket(void);
~WinSocket(void);
/**
*listen socket
**/
int SendMessage(SOCKET ¶Socket,SOCKADDR_IN ¶SeverAddr);
/**
*init the socket lib
**/
int InitSocketLib();
/**
*craate a socket
**/
int CreateSocket();
/**
*bind the socket
**/
int BindSocket(SOCKADDR_IN ¶SeverAddr);
/**
*listen socket
**/
int ListenSocket(int nType);
/**
*listen socket
**/
int AcceptSocket();
/**
*listen socket
**/
int ConnectSocket(string strServerIP,int nPort);
/**
*listen socket
**/
int ReceiveSocket(char **buffer);
private:
WSADATA m_WSAdata;
SOCKET m_socket,m_ClientSocket;
SOCKADDR_IN m_ServerSockAddr,m_ClientSocketAddr;
int nClientSocketAddrLen;
};
#endif
#include "WinSocket.h"
WinSocket::WinSocket(void)
{
}
WinSocket::~WinSocket(void)
{
}
/**
*init the socket lib
**/
int WinSocket::InitSocketLib()
{
return WSAStartup(MAKEWORD(1, 1), &m_WSAdata);
}
/**
*craate a Socket
**/
int WinSocket::CreateSocket()
{
m_socket = socket(AF_INET, SOCK_STREAM, 0);
if(m_socket==INVALID_SOCKET)
{
return ERROR;
}
return SUCCESS;
}
/**
*bind the socket
**/
int WinSocket::BindSocket(SOCKADDR_IN ¶SeverAddr)
{
if(bind(m_socket,(LPSOCKADDR)¶SeverAddr,sizeof(paraSeverAddr)) == SOCKET_ERROR)
{
return ERROR;
}
return SUCCESS;
}
/**
*listen socket
**/
int WinSocket::ListenSocket(int nType)
{
if(listen(m_socket,nType)==SOCKET_ERROR)
{
return ERROR;
}
return SUCCESS;
}
/**
*listen socket
**/
int WinSocket::AcceptSocket()
{
nClientSocketAddrLen = sizeof(m_ClientSocketAddr);
int nResult = accept(m_socket,(LPSOCKADDR)&m_ClientSocketAddr,&nClientSocketAddrLen);
if(nResult==SOCKET_ERROR)
{
return ERROR;
}
return SUCCESS;
}
/**
*listen socket
**/
int WinSocket::ConnectSocket(string strServerIP,int nPort)
{
m_ServerSockAddr.sin_addr.S_un.S_addr = inet_addr(strServerIP.c_str());
m_ServerSockAddr.sin_port = nPort;
m_ServerSockAddr.sin_family = AF_INET;
if(connect(m_socket,(LPSOCKADDR)&m_ServerSockAddr,sizeof(m_ServerSockAddr))==SOCKET_ERROR)
{
return ERROR;
}
return SUCCESS;
}
/**
*listen socket
**/
int WinSocket::ReceiveSocket(char **buffer)
{
int nResult = recv(m_ClientSocket,*buffer,MAXBUFLEN, NO_FLAGS_SET);
if(nResult == 0 || nResult == SOCKET_ERROR)
{
return ERROR;
}
return SUCCESS;
}