zoukankan      html  css  js  c++  java
  • Winsock 入门 Echo 示例

     1 #include <stdio.h>
     2 #include <winsock2.h> 
     3 
     4 #pragma comment(lib, "ws2_32") /* WinSock 使用的库函数 */
     5 
     6 #define ECHO_DEF_PORT     7 /* 侦听的缺省端口 */
     7 #define ECHO_BUF_SIZE   256 /* 缓冲区的大小   */
     8 
     9 int main(int argc, char **argv)
    10 {
    11     WSADATA wsa_data;
    12     SOCKET  echo_soc = 0,      /* 侦听 socket 句柄    */
    13             acpt_soc = 0;
    14 
    15     struct sockaddr_in serv_addr,   /* socket的本地地址 */
    16                        clnt_addr;   /* socket的远端地址 */
    17     unsigned short port = ECHO_DEF_PORT;
    18     int result = 0;
    19     int addr_len = sizeof(struct sockaddr_in);
    20     char recv_buf[ECHO_BUF_SIZE];
    21 
    22     if (argc == 2)
    23         port = atoi(argv[1]);
    24 
    25     WSAStartup(MAKEWORD(2,0), &wsa_data);/* 初始化 WinSock资源 */
    26     echo_soc = socket(AF_INET, SOCK_STREAM, 0); /* 创建 socket */
    27 
    28     /* socket 的本地地址 */
    29     serv_addr.sin_family = AF_INET;
    30     serv_addr.sin_port = htons(port);
    31     serv_addr.sin_addr.s_addr = INADDR_ANY;
    32 
    33     result = bind(echo_soc, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
    34     if (result == SOCKET_ERROR)
    35     {
    36         printf("[Echo Server] bind error: %d
    ", WSAGetLastError());
    37         closesocket(echo_soc);
    38         return -1;
    39     }
    40     
    41     listen(echo_soc, SOMAXCONN);
    42 
    43     printf("[Echo Server] is running ... ...
    ");
    44     while (1)
    45     {
    46         acpt_soc = accept(echo_soc, (struct sockaddr *)&clnt_addr, &addr_len);
    47         if (acpt_soc == INVALID_SOCKET)
    48         {
    49             printf("[Echo Server] accept error: %d
    ", WSAGetLastError());
    50             break;
    51         }
    52 
    53         result = recv(acpt_soc, recv_buf, ECHO_BUF_SIZE, 0);
    54         if (result > 0)
    55         {
    56             recv_buf[result] = 0;
    57             printf("[Echo Server] receives: "%s", from %s
    ", 
    58                    recv_buf, inet_ntoa(clnt_addr.sin_addr));
    59 
    60             result = send(acpt_soc, recv_buf, result, 0);
    61         }
    62 
    63         closesocket(acpt_soc);
    64     }
    65 
    66     closesocket(echo_soc);
    67     WSACleanup();
    68 
    69     return 0;
    70 }
     1 #include <stdio.h>
     2 #include <winsock2.h>
     3 
     4 #pragma comment(lib, "ws2_32") /* WinSock 使用的库函数    */
     5 
     6 #define ECHO_DEF_PORT     7 /* 连接的缺省端口 */
     7 #define ECHO_BUF_SIZE   256 /* 缓冲区的大小      */
     8 #define ECHO_DEF_ADD "127.0.0.1"/*连接的默认服务器为本机*/
     9 
    10 int main(int argc, char **argv)
    11 {
    12     WSADATA wsa_data;
    13     SOCKET echo_soc = 0;      /* socket 句柄 */
    14     struct sockaddr_in serv_addr;   /* 服务器地址 */
    15     unsigned short port = ECHO_DEF_PORT;
    16     char *conAdd=ECHO_DEF_ADD;
    17     int result = 0, send_len = 0;
    18     char *test_data = "Hello server!", recv_buf[ECHO_BUF_SIZE];
    19 
    20     WSAStartup(MAKEWORD(2,0), &wsa_data);/* 初始化 WinSock资源 */
    21     send_len = strlen(test_data);
    22 
    23     /* 服务器地址 */
    24     serv_addr.sin_family = AF_INET;
    25     serv_addr.sin_port = htons(port);
    26     serv_addr.sin_addr.s_addr = inet_addr(conAdd);
    27 
    28     if (serv_addr.sin_addr.s_addr == INADDR_NONE)
    29     {
    30         printf("[ECHO] invalid address
    ");
    31         return -1;
    32     };
    33 
    34     echo_soc = socket(AF_INET, SOCK_STREAM, 0); /* 创建 socket */
    35     result = connect(echo_soc, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
    36 
    37     if (result == 0) /* 连接成功 */
    38     {
    39         result = send(echo_soc, test_data, send_len, 0);
    40         result = recv(echo_soc, recv_buf, ECHO_BUF_SIZE, 0);
    41     }
    42 
    43     if (result > 0)
    44     {
    45         recv_buf[result] = 0;
    46         printf("[Echo Client] receives: "%s"
    ", recv_buf);
    47     }
    48     else
    49         printf("[Echo Client] error : %d.
    ", WSAGetLastError());
    50 
    51     getchar();
    52     closesocket(echo_soc);
    53     WSACleanup();
    54 
    55     return 0;
    56 }
  • 相关阅读:
    数据库课程设计
    VB.NET 数组的定义 动态使用 多维数组
    Hadoop学习之配置Eclipse远程调试Hadoop
    2014阿里巴巴研发project师暑期实习生面试经验
    SD卡中FAT32文件格式高速入门(图文具体介绍)
    Java抓取网页数据(原网页+Javascript返回数据)
    WPF中的CheckBox的_ (underscore / 下划线)丢失
    初识EPC
    SharePoint 2013 中代码创建列表查阅项字段
    代码编写逻辑(先伪代码,再带方法的逻辑,最后实现具体方法)(先控制器,再模型)
  • 原文地址:https://www.cnblogs.com/A--Q/p/6075820.html
Copyright © 2011-2022 走看看