首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在两个端点之间进行阅读和写入的示例?

如何在两个端点之间进行阅读和写入的示例?
EN

Stack Overflow用户
提问于 2014-03-07 20:47:51
回答 1查看 1.2K关注 0票数 1

我一直在为如何安排这件事而烦恼。我在网上找到了如何进行阅读和写作的信息,但我对如何同时进行阅读和写作感到困惑。我需要启动两个事件基循环吗?或者我能用一个吗?下面是我在网上找到的用于发送的代码示例(省略回调函数):

代码语言:javascript
运行
复制
int err;

#ifdef _WIN32
    WORD wVersionRequested;
    WSADATA wsaData;

    /* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */
    wVersionRequested = MAKEWORD(2, 2);

    err = WSAStartup(wVersionRequested, &wsaData);

    if (err != 0) {
        /* Tell the user that we could not find a usable */
        /* Winsock DLL.                                  */
        printf("WSAStartup failed with error: %d\n", err);
        return false;
    }
#endif

    struct event_base *base;
    struct bufferevent *bev;
    struct sockaddr_in sin;

    base = event_base_new();

    memset(&sin, 0, sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = htonl(0x7f000001); /* 127.0.0.1 */
    sin.sin_port = htons(22346); 

    bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);

    bufferevent_setcb(bev, NULL, NULL, eventcb, NULL);
    bufferevent_enable(bev, EV_READ|EV_WRITE);

    evbuffer_add_printf(bufferevent_get_output(bev), "WOOOOOOOOOOOOOO");

    if (bufferevent_socket_connect(bev,
        (struct sockaddr *)&sin, sizeof(sin)) < 0) {
        /* Error starting connection */
        bufferevent_free(bev);
        return -1;
    }

    event_base_dispatch(base);
EN

回答 1

Stack Overflow用户

发布于 2014-03-09 13:14:52

首先,您应该使用bufferevent_write()而不是较低级别的evbuffer_add_printf() -前者更干净,底层的evbuffer_add_printf()可能会被冻结。

您还禁用了读和写回调-因此,当您可以从缓冲区事件读取时,您将不会得到回调。至少实现读取回调,并通过bufferevent_setcb()设置它。也许这就是你没看到任何事情发生的原因。

接下来,可能你要么:

  • 想要在连接时向对等方发送一些东西--当您在您的bufferevent_write()回调中获得连接事件(BEV_EVENT_CONNECTED)时使用eventcb
  • 期望从连接后的对等方接收到一些信息--在这种情况下,您的读取回调将被调用。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22260369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档