P2PClientDemo.cpp
上传用户:zhangjjyh
上传日期:2021-11-11
资源大小:1251k
文件大小:2k
源码类别:

P2P编程

开发平台:

Objective-C

  1. //////////////////////////////////////////////////////////
  2. // P2PClient.cpp文件
  3. #include <winsock2.h>
  4. #include <stdio.h>
  5. #include "p2pclient.h"
  6. class CMyP2P : public CP2PClient
  7. {
  8. public:
  9. void OnRecv(char *pszUserName, char *pszData, int nDataLen)
  10. {
  11. pszData[nDataLen] = '';
  12. printf(" Recv a Message from %s :  %s n", pszUserName, pszData);
  13. }
  14. };
  15. void main()
  16. {
  17. CMyP2P client;
  18. if(!client.Init(0))
  19. {
  20. printf(" CP2PClient::Init() failed n");
  21. return ;
  22. }
  23. // 获取服务器IP地址和用户名
  24. char szServerIp[20];
  25. char szUserName[MAX_USERNAME];
  26. printf(" Please input server ip: ");
  27. gets(szServerIp);
  28. printf(" Please input your name: ");
  29. gets(szUserName);
  30. // 登陆服务器
  31. if(!client.Login(szUserName, szServerIp))
  32. {
  33. printf(" CP2PClient::Login() failed n");
  34. return ;
  35. }
  36. // 第一次登陆,首先更新用户列表
  37. client.GetUserList();
  38. // 将当前状态和本程序的用法输出给用户
  39. printf(" %s has successfully logined server n", szUserName);
  40. printf("n Commands are: "getu", "send", "exit" n");
  41. // 循环处理用户命令
  42. char szCommandLine[256];
  43. while(TRUE)
  44. {
  45. gets(szCommandLine);
  46. if(strlen(szCommandLine) < 4)
  47. continue;
  48. // 解析出命令
  49. char szCommand[10];
  50. strncpy(szCommand, szCommandLine, 4);
  51. szCommand[4] = '';
  52. if(stricmp(szCommand, "getu") == 0)
  53. {
  54. // 获取用户列表
  55. if(client.GetUserList())
  56. {
  57. printf(" Have %d users logined server: n", client.m_PeerList.m_nCurrentSize);
  58. for(int i=0; i<client.m_PeerList.m_nCurrentSize; i++)
  59. {
  60. PEER_INFO *pInfo = &client.m_PeerList.m_pPeer[i];
  61. printf(" Username: %s(%s:%ld) n", pInfo->szUserName, 
  62. ::inet_ntoa(*((in_addr*)&pInfo->addr[pInfo->AddrNum -1].dwIp)), pInfo->addr[pInfo->AddrNum - 1].nPort);
  63. }
  64. }
  65. else
  66. {
  67. printf(" Get User List Failure !n");
  68. }
  69. }
  70. else if(stricmp(szCommand, "send") == 0)
  71. {
  72. // 解析出对方用户名
  73. char szPeer[MAX_USERNAME];
  74. for(int i=5;;i++)
  75. {
  76. if(szCommandLine[i] != ' ')
  77. szPeer[i-5] = szCommandLine[i];
  78. else
  79. {
  80. szPeer[i-5] = '';
  81. break;
  82. }
  83. }
  84. // 解析出要发送的消息
  85. char szMsg[56];
  86. strcpy(szMsg, &szCommandLine[i+1]);
  87. // 发送消息
  88. if(client.SendText(szPeer, szMsg, strlen(szMsg)))
  89. printf(" Send OK! n");
  90. else
  91. printf(" Send Failure! n");
  92. }
  93. else if(stricmp(szCommand, "exit") == 0)
  94. {
  95. break;
  96. }
  97. }
  98. }