[C] c-windows_socket-client →→→→→进入此内容的聊天室

来自 , 2020-06-15, 写在 C, 查看 150 次.
URL http://www.code666.cn/view/878d5691
  1. /******************************************************************************
  2.  * 程序: winsock_client.c
  3.  * 目的: 创建一个套接字,通过网络连接一个服务器,并打印来自服务器的信息
  4.  * 作者: 周 晨
  5.  * 学号: 2011210154
  6.  *****************************************************************************/
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #include <WinSock2.h>
  12. #include <Windows.h>
  13.  
  14. /* 导入win32函数库 */
  15. #pragma comment(lib, "WS2_32.lib")
  16.  
  17. /* winsock初始化成功标志 */
  18. #define WSA_STARTUP_SUCCESS 0
  19. /* 接受服务器数据的缓冲区数组长度 */
  20. #define BUFFER_SIZE 35
  21.  
  22. /* 获取系统当前的日期和时间 */
  23. void GetSystemCurrentTime()
  24. {
  25.         SYSTEMTIME sys;
  26.         GetLocalTime( &sys );
  27.         printf("%4d-%02d-%02d %02d:%02d:%02d - ",
  28.                         sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond);
  29. }
  30.  
  31. int main()
  32. {
  33.         /* 接收函数调用返回的状态码 */
  34.         int state_code = 0;
  35.         /* 服务器IP地址 */
  36.         char FAR server_ip[] = "127.0.0.1";
  37.         /* 服务器端口号 */
  38.         int server_port = 5199;
  39.         /* 声明一个客户端Socket连接 */
  40.         SOCKET client_socket;
  41.         /* 声明服务器端的网络地址结构 */
  42.         SOCKADDR_IN server_address;
  43.         /* 清空该网络地址结构 */
  44.         memset( &server_address, 0, sizeof(server_address) );
  45.         /* 设置为Internet协议簇 */
  46.         server_address.sin_family = AF_INET;
  47.         /* 转化服务器IP地址 */
  48.         server_address.sin_addr.S_un.S_addr = inet_addr(server_ip);
  49.         /* 转化服务器端口号 */
  50.         server_address.sin_port = htons(server_port);
  51.         /* 网络地址结构所占字节大小 */
  52.         int server_address_size = (int)sizeof(SOCKADDR_IN);
  53.         /* 从服务器端读取到的字符数 */
  54.         int character_count = 0;
  55.         /* 接受服务器数据的缓冲区 */
  56.         char buffer[BUFFER_SIZE];
  57.  
  58.         GetSystemCurrentTime();
  59.         printf("Client:客户端已启动!\n");
  60.  
  61.         /* 初始化 WinSock 连接 */
  62.         WSADATA wsadata;
  63.         state_code = WSAStartup(MAKEWORD(2, 2), &wsadata);
  64.         if (WSA_STARTUP_SUCCESS != state_code)
  65.         {
  66.                 GetSystemCurrentTime();
  67.                 printf("发生错误:初始化WinSock连接失败!错误码:%d\n", WSAGetLastError());
  68.                 exit(EXIT_FAILURE);
  69.         }
  70.  
  71.         /* 创建 Socket 连接 */
  72.         client_socket = socket(AF_INET, SOCK_STREAM, 0);
  73.         GetSystemCurrentTime();
  74.         if (INVALID_SOCKET == client_socket)
  75.         {
  76.                 printf("发生错误:客户端套接字创建失败!错误码:%d\n", WSAGetLastError());
  77.                 closesocket(client_socket);
  78.                 WSACleanup();
  79.                 exit(EXIT_FAILURE);
  80.         }
  81.         printf("Client:客户端套接字已成功创建!\n");
  82.  
  83.         /* 尝试连接到服务器端 */
  84.         GetSystemCurrentTime();
  85.         printf("Client:正在尝试连接服务器......\n");
  86.         state_code = connect(client_socket, (SOCKADDR*)&server_address, server_address_size);
  87.         GetSystemCurrentTime();
  88.         if (SOCKET_ERROR == state_code)
  89.         {
  90.                 printf("发生错误:连接服务器失败!错误码:%d\n", WSAGetLastError());
  91.                 closesocket(client_socket);
  92.                 WSACleanup();
  93.                 exit(EXIT_FAILURE);
  94.         }
  95.         printf("Client:连接服务器成功!\n");
  96.  
  97.         /* 从服务器端读取数据并将其输出到屏幕上 */
  98.         character_count = recv(client_socket, buffer, strlen(buffer), 0);
  99.         while (character_count > 0)
  100.         {
  101.                 GetSystemCurrentTime();
  102.                 printf("Client:收到来自服务器Server端的消息,内容如下:\n\n");
  103.                 GetSystemCurrentTime();
  104.                 printf("%s\n\n", buffer);
  105.                 character_count = recv(client_socket, buffer, strlen(buffer), 0);
  106.         }
  107.         /* 关闭本次socket连接并清除winsock */
  108.         closesocket(client_socket);
  109.         WSACleanup();
  110.         system("pause");
  111.         exit(EXIT_SUCCESS);
  112.  
  113.         return EXIT_SUCCESS;
  114. }

回复 "c-windows_socket-client"

这儿你可以回复上面这条便签

captcha