xfzztd 2014-08-12 20:27
浏览 4334

阿里云服务器收不到websocket握手消息

代码如下,这段代码在我的vm虚拟机里可以正常运行,服务端能收到握手消息。但把代码放到阿里云服务器上时就,能收到accept请求,就是没触发read事件。有没谁遇到过相同的问题,求解啊!
是不是阿里云服务器的环境哪有问题,还是有哪个库有问题。

服务端代码:

    for (n = 0; n < nfds; ++n)
    {
        if (events[n].data.fd == listenfd) 
        {
            connfd = accept(listenfd, (struct sockaddr *)&cliaddr,&socklen);
            if (connfd < 0) 
            {
                perror("accept error");
                continue;
            }

            sprintf(buf, "accept form %s:%d\n", inet_ntoa(cliaddr.sin_addr), cliaddr.sin_port);
            printf("%d:%s", ++acceptCount, buf);

            if (curfds >= MAXEPOLLSIZE) {
                fprintf(stderr, "too many connection, more than %d\n", MAXEPOLLSIZE);
                close(connfd);
                continue;
            } 
            if (setnonblocking(connfd) < 0) {
                perror("setnonblocking error");
            }
            ev.events = EPOLLIN | EPOLLET;
            ev.data.fd = connfd;
            if (epoll_ctl(kdpfd, EPOLL_CTL_ADD, connfd, &ev) < 0)
            {
                fprintf(stderr, "add socket '%d' to epoll failed: %s\n", connfd, strerror(errno));
                return -1;
            }
            curfds++;
            continue;
        } 
        // 处理客户端请求
        if (handle(events[n].data.fd) < 0) {
            epoll_ctl(kdpfd, EPOLL_CTL_DEL, events[n].data.fd,&ev);
            curfds--;


        }
    }
}
int handle(int connfd) {
    int nread;
    char buf[MAXLINE];
    nread = read(connfd, buf, MAXLINE);//读取客户端socket流

    if (nread == 0) {
        printf("client close the connection\n");
        close(connfd);
        return -1;
    } 
    if (nread < 0) {
        perror("read error");
        close(connfd);
        return -1;
    }    
    buf[nread] = '\0';
    printf("received:%s\n",buf);
    write(connfd, buf, nread);//响应客户端  
    return 0;
}

客户端就是new WebSocket(url)

展开全部

  • 写回答

0条回答 默认 最新

      编辑
      预览

      报告相同问题?

      悬赏问题

      • ¥20 MC9S12XS128单片机开发板实验,
      • ¥15 C#多线程假死或卡死问题
      • ¥15 关于#tcp/ip#的问题:苹果电脑M1,easyconnect登录成功,显示虚拟 IP 地址
      • ¥15 客户端发现不了OPC服务器
      • ¥35 spaceclaim脚本
      • ¥500 寻找华为新款路由器开telnet方法
      • ¥20 运行pointnerf模型遇到了pycuda的错误,如何解决?(相关搜索:测试代码|自动驾驶|数据集)
      • ¥15 失败的github程序安装
      • ¥15 WSL上下载的joern在windows怎么用?
      • ¥15 jetson nano4GB
      手机看
      程序员都在用的中文IT技术交流社区

      程序员都在用的中文IT技术交流社区

      专业的中文 IT 技术社区,与千万技术人共成长

      专业的中文 IT 技术社区,与千万技术人共成长

      关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

      关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

      客服 返回
      顶部