• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > lwiptcp并发服务器,seletc连接不稳定,两个客户端同时方式,server收发一段时间后,再也连接不上

lwiptcp并发服务器,seletc连接不稳定,两个客户端同时方式,server收发一段时间后,再也连接不上

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了lwiptcp并发服务器,seletc连接不稳定,两个客户端同时方式,server收发一段时间后,再也连接不上等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: lwip tcp并发服务器,seletc连接不稳定,两个客户端同时方式,server收发一段时间后,再也连接不上
描述:

lwip select并发服务器

lwip tcp并发服务器,seletc连接不稳定,两个客户端同时方式,server收发一段时间后,再也连接不上,希望高手帮我分析下原因,非常感谢!!!
开发平台:ST,M32、FreeRTOS、lwip
参考例程:http://blog.csdn.net/god2469/article/details/8761346#comments
#define LISTEN_MAX 5        /* 允许接收的客户端数量最大为5 */
#define RCV_BUF_LEN 1500
static void TCP_ServerSocketThread(void *arg)
{
    int server_sockfd, new_cli_sockfd;
    int rcd;
    int watch_fd_list[LISTEN_MAX]; /* 存放文件描述符值的数组 */
    int maxfd;  /* 需要监视的最大的文件描述符值 */
    fd_set watchfd; /* 存放所有的待检查的文件描述符 */
    uint8_t i = 0;
    struct timeval tv;
    struct sockaddr_in server_addr, client_addr;
    socklen_t srvaddr_len, cliaddr_len;
    char rcv_buf[1500];
    uint32_t rcv_len = 0;
    uint32_t snd_len = 0;
    for (i=0; i<LISTEN_MAX; i++) {
        watch_fd_list[i] = -1;
    }
    /* 创建IPv4的流式套接字TCP socket */
    server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (server_sockfd == -1) {
        return ; /* Error */
    }
    /* 初始化 */
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(36000);
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    /* 绑定socket */
    srvaddr_len = (socklen_t)sizeof(server_addr);
    if (bind(server_sockfd, (struct sockaddr *)&server_addr, srvaddr_len) == -1) {
        return ;
    }
    /* listen侦听 */
    if (listen(server_sockfd, LISTEN_MAX) == -1) {
        return ;
    }
    watch_fd_list[0] = server_sockfd;
    maxfd = server_sockfd;
    /* 初始化监听集合 */
    FD_ZERO(&watchfd);
    FD_SET(server_sockfd, &watchfd);
    while (1) {
        tv.tv_sec = 20;// 5
        tv.tv_usec = 0; /* 设置select等待的最大时间为5秒 */
        /* 每次都要重新设置集合才能激发事件 */
        FD_ZERO(&watchfd);
        FD_SET(server_sockfd, &watchfd);
        /* 更新集合watchfd */
        for (i=0; i<LISTEN_MAX; i++) {
            if (watch_fd_list[i] != -1) {
                FD_SET(watch_fd_list[i], &watchfd);
            }
        }
        rcd = select(maxfd+1, &watchfd, NULL, NULL, &tv);
        if (rcd == -1) {
            /* err */
            break;
        }
        else if (rcd == 0) { /* 超时则清理掉所有集合元素并关闭所有与客户端的socket */
            FD_ZERO(&watchfd);
            for (i=0; i<LISTEN_MAX; i++) {
                shutdown(watch_fd_list[i], 2);
                watch_fd_list[i] = -1;
            }
            /* 重新设置监听socket,等待链接 */
            FD_CLR(server_sockfd, &watchfd);
            FD_SET(server_sockfd, &watchfd);
            continue ;
        }
        else {
            /* 检测是否有新连接建立 */
            if (FD_ISSET(server_sockfd, &watchfd)) { //new connection
                /* 等待客户端连接 */
                cliaddr_len = sizeof(client_addr);
                new_cli_sockfd = accept(server_sockfd, (struct sockaddr *)&client_addr, &cliaddr_len);
                if (new_cli_sockfd < 0) { /* new_cli_sockfd用于和新的client通信 */
                    return ;
                }
                /* 更新描述符值数组 */
                for (i=0; i<LISTEN_MAX; i++) {
 &
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • lwiptcp并发服务器,seletc连接不稳定,两个客户端同时方式,server收发一段时间后,再也连接不上

相关文章

  • 2017-06-05 请问谁做过cy7c68013a在linux上的usb驱动?
  • 2017-06-05 关于ITRON的问题
  • 2017-06-17ARM微处理器的工作状态
  • 2017-06-05 debug的作用
  • 2017-06-05 马上大四了,选择就业,正在纠结深圳和北京这两个城市
  • 2017-06-05 104-AI12-8模拟多功能I/O板的数据采集(AD转换)的相关问题,求大神指点迷津!!!
  • 2017-06-05 我想写网卡的驱动,谁能告诉我那些标准在那里下。如RTL8019as
  • 2017-06-05 嵌入式Linux下的媒体播放器有人了解吗?
  • 2017-06-05 热释电红外传感器(PIR)中的一些参数理解,请教
  • 2017-06-05 tinyosimote2basestation

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 嵌入式开发,启动问题?
    • 初学windows驱动程序设计,请推荐几本好书
    • [求助]OpenwrtMT7620A第二个串口打开
    • WIN7下PCI驱动开发问题,谢谢
    • vxworks上的isnan、strcasecmp等函数
    • windriver生成inf文件失败怎么办啊
    • 请教取cmos时间的问题
    • 请问:在VXworksRTOS程序设计中,读写外部存贮器方式?
    • USBD_CONFIGURATION_HANDLE这个结构是如何定义的?
    • 发送端串口发送3个doble类型的数据,接收端要怎么处理呢?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有