/*************************************************************************
 * 
 * Copyright (c) 2002-2005 by Zhang Huiyong All Rights Reserved
 *
 * FILENAME:  EchoSrv.c
 *
 * PURPOSE :  ECHO 协议服务器程序.
 *  
 * AUTHOR  :  张会勇
 * 
 * BOOK    :  <<WinSock网络编程经络>>
 *
 * 注: 此代码乃基本代码:
 * 注: 作者CH
 * 
 **************************************************************************/

#include <stdio.h>
#include <winsock2.h>

#pragma comment(lib, "ws2_32") /* WinSock 使用的库函数 */

#define ECHO_DEF_PORT     7 /* 侦听的缺省端口 */
#define ECHO_BUF_SIZE   256 /* 缓冲区的大小   */

int main(int argc, char **argv)
{
    WSADATA wsa_data;
    SOCKET  echo_soc = 0,      /* 侦听 socket 句柄 */
            acpt_soc = 0;

struct sockaddr_in serv_addr,   /* socket的本地地址 */
                       clnt_addr;   /* socket的远端地址 */
    unsigned short port = ECHO_DEF_PORT;
    int result = 0;
    int addr_len = sizeof(struct sockaddr_in);
    char recv_buf[ECHO_BUF_SIZE];

if (argc == 2)
        port = atoi(argv[1]);

WSAStartup(MAKEWORD(2,0), &wsa_data);/* 初始化 WinSock资源 */
    echo_soc = socket(AF_INET, SOCK_STREAM, 0); /* 创建 socket */

/* socket 的本地地址 */
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(port);
    serv_addr.sin_addr.s_addr = INADDR_ANY;

result = bind(echo_soc, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
    if (result == SOCKET_ERROR)
    {
        printf("[Echo Server] bind error: %d\n", WSAGetLastError());
        closesocket(echo_soc);
        return -1;
    }
    
    listen(echo_soc, SOMAXCONN);

printf("[Echo Server] is running ... ...\n");
    while (1)
    {
        acpt_soc = accept(echo_soc, (struct sockaddr *)&clnt_addr, &addr_len);
        if (acpt_soc == INVALID_SOCKET)
        {
            printf("[Echo Server] accept error: %d\n", WSAGetLastError());
            break;
        }

result = recv(acpt_soc, recv_buf, ECHO_BUF_SIZE, 0);
        if (result > 0)
        {
            recv_buf[result] = 0;
            printf("[Echo Server] receives: \"%s\", from %s\r\n", 
                   recv_buf, inet_ntoa(clnt_addr.sin_addr));

result = send(acpt_soc, recv_buf, result, 0);
        }

closesocket(acpt_soc);
    }

closesocket(echo_soc);
    WSACleanup();   //释放windows资源代码

return 0;
}

winsocket(1)相关推荐

  1. 使用C++实现Socket编程图片打包传输(修改)

    使用: (1)首先运行服务端,待服务端运行起来: (2)最后运行客户端,输入要传输文件到哪个目标机器的IP地址: (3)输入传输文件的路径及文件(完成的路径),其中包含文件的类型,也就是后缀需要包含( ...

  2. qt socket 传递结构体 结构体中有list_计算机网络应用--Socket编程实验(二)

    本节关于socket部分函数库列表,具体基于socket的实例实现代码见下节.给出基于winSocket的简单websever实例. 2.1 WSAStartup() [函数原型] int WSASt ...

  3. 华为C语言面试题(转!)

    C语言面试题大汇总之华为面试题                                      Eddy整理 1.局部变量能否和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,需要使用 ...

  4. 游戏外挂制作指南 (一)

    要想在修改游戏中做到百战百胜,是需要相当丰富的计算机知识的.有很多计算机高手就是从玩游戏,修改游戏中,逐步对计算机产生浓厚的兴趣,逐步成长起来的.不要在羡慕别人能够做到的,因为别人能够做的你也能够!我 ...

  5. 网络程序之TCP、UDP篇(其一)

    我记得最开始接触网络程序是在我读大二的时候,当时我做的是一个聊天的程序,也不知道服务器和客户端的概念,在网上就是一顿找啊,才到自己能看懂的答案,但是只能两个程序能聊天.造成这样的原因是程序是阻塞的,然 ...

  6. vc 网络编程(socket)TCP/UDP 介绍

    在网上找了很多的资料,现将这些资料整合起来,详细介绍一下VC下的socket编程,并提供一个服务器客户端具体的实例.希望对您有所帮助 一.原理部分 在网络编程中最常用的方案便是Client/Serve ...

  7. OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3

    OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...

  8. 2022-2028年中国第五代移动通信技术(5G)市场研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国第五代移动通信技术(5G)行业市场行业相 ...

  9. 2021-2027全球与中国经颅磁刺激仪(TMS)市场现状及未来发展趋势

    [报告类型]产业研究 [报告价格]¥4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了全球与中国经颅磁刺激仪(TMS)行业市场行 ...

最新文章

  1. python序列类型有_Python序列类型
  2. mstsc 加密oracle修正,mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法...
  3. .NET Core + Spring Cloud:服务注册与发现
  4. 利用FormData对象实现AJAX文件上传功能及后端实现
  5. 对ARP病毒攻击的防范和处理及相应工具方法
  6. 读书后对PMP的理解
  7. 使用本机IP调试web项目
  8. 数据结构1——堆栈和队列
  9. 18个国外优质图片素材
  10. 华为5G空口新技术(2015年)
  11. xp怎么查看计算机配置,怎么查看xp系统的配置信息
  12. 选购笔记本要看清液晶屏幕及主流技术
  13. 如何在手机上将图片转换为文字
  14. 如何启用计算机网络,启用网络发现,教您win10怎么启用网络发现
  15. MATLAB如何解决弹出路径不存在的问题
  16. 文献阅读 | Tracing the ancestry of modern bread wheats
  17. c语言outl函数,如何调用outlook
  18. 什么是RMI,什么是RPC,两者之间的区别是什么?
  19. Python入门--Pthon环境的安装
  20. 基于SphereFace深度学习的人脸考勤系统(Caffe+windows+OpenCV)

热门文章

  1. keil复制代码乱码_成都控制器开发:容易忽略!用KEIL编码汉字也会有BUG
  2. 学习笔记--asp.net母版页(转自msdn,仅为自己学习存储和有意读者使用)
  3. 双y轴设置 颜色_项目实战:Qt多段Y轴折线图框架(双Y轴段折线、支持拽拖、浮动游标显示X值各段Y值、实时下位机数据)...
  4. python计算众数
  5. storm如何集成kafka
  6. wps怎么投递简历发到boss直聘_BOSS直聘角逐招聘季:装机量、下载增量、增长率三料冠军...
  7. 计算机的指令合成为,第二章计算机操作基础知识doc
  8. C#查找指定窗口的子窗口的句柄
  9. UVA5876 Writings on the Wall 扩展KMP
  10. C++技术沙龙主要内容