Client.cpp
上传用户:bsw_2008
上传日期:2013-07-09
资源大小:2446k
文件大小:2k
源码类别:

棋牌游戏

开发平台:

Visual C++

  1. // Client.cpp: implementation of the CClient class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "CGameHallFrame.h"
  6. #include "Client.h"
  7. #include "CGameHallFrameView.h"
  8. #ifdef _DEBUG
  9. #undef THIS_FILE
  10. static char THIS_FILE[]=__FILE__;
  11. #define new DEBUG_NEW
  12. #endif
  13. //////////////////////////////////////////////////////////////////////
  14. // Construction/Destruction
  15. //////////////////////////////////////////////////////////////////////
  16. CClient::CClient()
  17. {
  18. m_hSocket=NULL;
  19. }
  20. CClient::~CClient()
  21. {
  22. }
  23. void CClient::ClientInit()
  24. {
  25. if(WSAAsyncSelect(m_hSocket,m_hWnd,CLI_MESSAGE,FD_READ|FD_WRITE|FD_CLOSE|FD_CONNECT)>0)
  26. {
  27. AfxMessageBox("Error in select");
  28. }
  29. }
  30. BOOL CClient::InitAndConnect(HWND hWnd, UINT port, CString strServer)
  31. {
  32. m_hWnd=hWnd;
  33. m_uPort=port;
  34. m_strServer=strServer;
  35. if(m_hSocket!=NULL)
  36. {
  37. //先将以前打开的套接字关闭
  38. closesocket(m_hSocket);
  39. m_hSocket=NULL;
  40. }
  41. //创建面向连接的socket
  42. m_hSocket=socket(AF_INET,SOCK_STREAM,0);
  43. ASSERT(m_hSocket!=NULL);
  44. ClientInit();
  45. //设置连接信息:网络协议+IP地址+端口
  46. m_addr.sin_family=AF_INET;
  47. m_addr.sin_addr.S_un.S_addr=inet_addr(m_strServer.GetBuffer(0));
  48. m_addr.sin_port=htons(m_uPort);
  49. //连接服务器
  50. int ret=0;
  51. int error=0;
  52. ret=connect(m_hSocket,(LPSOCKADDR)&m_addr,sizeof(m_addr));
  53. if(ret==SOCKET_ERROR)
  54. {
  55. //连接失败
  56. if(GetLastError()!=WSAEWOULDBLOCK)
  57. {
  58. AfxMessageBox(_T("请确认服务器确实已经打开并工作在同样的端口!"));
  59. return FALSE;
  60. }
  61. }
  62. return TRUE;
  63. }
  64. void CClient::GetString(CString &str)
  65. {
  66. recv(m_hSocket,str.GetBuffer(0),1024,MSG_DONTROUTE);
  67. }
  68. void CClient::SendString(CString a)
  69. {
  70. if(send(m_hSocket,a.GetBuffer(0),a.GetLength(),0)==SOCKET_ERROR)
  71. {
  72. AfxMessageBox("Client Send data error");
  73. }
  74. }