server.cpp
上传用户:swkcbjrc
上传日期:2016-04-02
资源大小:45277k
文件大小:3k
源码类别:

游戏

开发平台:

Visual C++

  1. //===========================================================
  2. //示例程序:演示如何通过Winsock编程实现简单的时间/日期服务程序
  3. //编写:suyu 2003/06 完整程序示例在随书配套光盘
  4. //============================================================
  5. #include "stdafx.h"
  6. #include "winsock.h"
  7. #include "stdlib.h"
  8. #include "stdio.h"
  9. void usage(char *name)
  10. {
  11. fprintf(stderr, "usage: %s [port]n", name);
  12. }
  13. int main(int argc,char *argv[])
  14. {
  15. SOCKET servsock,clisock;
  16. struct sockaddr_in sa;
  17. struct sockaddr_in cliaddr; /* 存放返回的客户地址信息 */
  18. int len;
  19. int err;
  20. int servport = 5555; /* 默认服务端口 */
  21. char buff[256]; /* 存放时间/日期信息的缓冲区 */
  22. SYSTEMTIME st;
  23. WSADATA wsd;
  24. printf("************************************************************n");
  25. printf("*time server sample,written by suyu,chenyun");
  26. printf("*mail:wantsoft@163.com                    n");
  27. printf("************************************************************n");
  28.     /* 处理命令行参数 */
  29. if (argc > 2) 
  30. {
  31. usage(argv[0]);
  32. return -1;
  33. }
  34. if (argc == 2) 
  35. {
  36. servport = atoi(argv[1]);
  37. if (servport > 65535 || servport < 1)
  38. {
  39. usage(argv[0]);
  40. return -2;
  41. }
  42. }
  43. /* 初始化Winsock1.1 */
  44. if (WSAStartup(MAKEWORD(1,1), &wsd) != 0) 
  45. {
  46. printf("WSAStartup() failed !n");
  47. return -3;
  48. }
  49. /* 创建套接字 */
  50. printf("create socket ...n");
  51. servsock = socket(AF_INET, SOCK_STREAM, 0);
  52. if (servsock == INVALID_SOCKET) 
  53. {
  54. fprintf(stderr, "socket() failed: %dn", WSAGetLastError());
  55. return -4;
  56. }
  57. printf("[OK]n");
  58. /* 填充服务器地址结构 */
  59. memset(&sa, 0, sizeof(sa));
  60. sa.sin_family = AF_INET;
  61. sa.sin_port = htons(servport);
  62. sa.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
  63. /* 绑定套接字到服务器地址结构 */
  64. printf("bind ...n");
  65. err = bind(servsock, (const sockaddr *)&sa,sizeof(sa));
  66. if (err != 0) 
  67. {
  68. fprintf(stderr, "bind() failed: %dn", WSAGetLastError());
  69. return -5;
  70. }
  71. printf("[OK]n");
  72. /* 监听套接字 */
  73. printf("listen ...n");
  74. err = listen(servsock,5);
  75. if (err != 0) 
  76. {
  77. fprintf(stderr, "listen() failed: %dn", WSAGetLastError());
  78. return -6;
  79. }
  80. printf("[OK]n");
  81. /* 循环接受连接请求 */
  82. while(1) 
  83. {
  84. printf("wait request ...n");
  85. len = sizeof(cliaddr);
  86. clisock = accept(servsock, (struct sockaddr *)&cliaddr, &len);
  87. if (clisock == INVALID_SOCKET) 
  88. {
  89. fprintf(stderr, "accept() failed: %dn", WSAGetLastError());
  90. closesocket(servsock);
  91. return -7;
  92. }
  93. printf("accept client: %s:%dn", inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));
  94. GetLocalTime(&st); /* 得到本地时间/日期 */
  95. /* 为返回给客户整理时间/日期信息格式 */
  96. sprintf(buff,"YEAR : %u nMONTH : %u nDAY : %u nHOUR: %u nMINUTE : %u nSECOND : %u n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
  97. send(clisock, buff, strlen(buff), 0); /* 发送给客户 */
  98. closesocket(clisock); /* 关闭与客户的连接 */
  99. printf("[server OK]n");
  100. }
  101. closesocket(servsock); /* 关闭服务套接字 */
  102. WSACleanup(); /* 释放资源 */
  103. return 0;
  104. }