www.pudn.com > MFCl.rar > Client.cpp


// Client.cpp: implementation of the CClient class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "WSAAsyncSelectClient.h" 
#include "Client.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CClient::CClient() 
{ 
	WSADATA wsaData; 
	WORD version = MAKEWORD(2, 2); 
	int ret = WSAStartup(version, &wsaData); 
	if(ret != 0) 
	{ 
		TRACE("载入Winsock库错误!\n");   
		AfxMessageBox("载入Winsock库错误"); 
	} 
	 
	m_sConnectSocket =NULL; 
} 
 
CClient::~CClient() 
{ 
	WSAAsyncSelect(m_sConnectSocket, m_hWnd, 0, 0); 
	closesocket(m_sConnectSocket); 
	WSACleanup(); 
} 
 
BOOL CClient::InitAndConnet(HWND hwnd,UINT port,CString strserver) 
{ 
	m_hWnd=hwnd; 
	m_uPort=port; 
	m_strServer=strserver; 
	if(m_sConnectSocket != NULL) 
	{ 
		//如果原来打开这套接字先关闭 
		closesocket(m_sConnectSocket); 
		m_sConnectSocket = NULL; 
	} 
	if(m_sConnectSocket == NULL) 
	{ 
		//创建新的流套接字 
		m_sConnectSocket = socket(AF_INET, SOCK_STREAM,0); 
		ASSERT(m_sConnectSocket != NULL); 
	} 
	 
	//准备服务器的信息,这里需要指定服务器的地址 
	m_addr.sin_family = AF_INET; 
	m_addr.sin_addr.S_un.S_addr = inet_addr(m_strServer.GetBuffer(0)); 
	m_addr.sin_port = htons(m_uPort);   //改变端口号的数据格式 
	 
	//将套接字设置为窗口消息类型 
	if(WSAAsyncSelect(m_sConnectSocket,m_hWnd,CLI_MESSAGE,FD_READ|FD_WRITE|FD_CLOSE|FD_CONNECT)>0) 
	{ 
		AfxMessageBox("无法将套接字设置为窗口消息类型"); 
	} 
	 
	//这里主动连接服务器,该过程将等待一定时间 
	int ret = 0; 
	ret = connect(m_sConnectSocket, (sockaddr*)&m_addr, sizeof(m_addr)); 
 
	if(ret == SOCKET_ERROR) 
	{//连接失败	     
		if(GetLastError()!=WSAEWOULDBLOCK) 
		{ 
			AfxMessageBox("请确认服务器确实已经打开并工作在同样的端口!"); 
			return FALSE; 
		} 
	} 
	return TRUE; 
} 
 
 
int CClient::SendString(CString a) 
{ 
	int sendlen=send(m_sConnectSocket,a.GetBuffer(a.GetLength()),a.GetLength(),0); 
	return sendlen; 
	/* 
	typedef char CHAR; 
	typedef CHAR *LPSTR, *PSTR; 
	typedef LPSTR PTSTR, LPTSTR; 
	*/ 
}