tcp/ip协议栈--socket API 之发送函数(read/recv)

0x01 缘由

     前面博文把服务端、客户端三次握手连接过程学习完了,现在开始学习下相关接收数据API。

0x02 API介绍

     


0x03 相关调用一览


0x04 tcp层

0x05 总结

     发送过程仅仅是将相关数据接收,其他细节后期在继续学习。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在libevent中实现TCP/IP客户端的回调函数,可以按照以下方式进行: ```c #include <event2/event.h> #include <event2/bufferevent.h> #include <event2/buffer.h> #include <event2/listener.h> #include <event2/util.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/socket.h> #include <fcntl.h> #pragma comment(lib, "event.lib") #pragma comment(lib, "event_core.lib") #pragma comment(lib, "event_extra.lib") void read_cb(struct bufferevent* bev, void* ctx) { struct evbuffer* input = bufferevent_get_input(bev); char* line = evbuffer_readln(input, NULL, EVBUFFER_EOL_CRLF); if (line) { printf("recv: %s", line); bufferevent_write(bev, line, strlen(line)); bufferevent_write(bev, "\r\n", 2); free(line); } } void event_cb(struct bufferevent* bev, short events, void* ctx) { if (events & BEV_EVENT_EOF) { printf("Connection closed.\n"); } else if (events & BEV_EVENT_ERROR) { printf("Some other error.\n"); } bufferevent_free(bev); } int main(int argc, char** argv) { struct sockaddr_in sin; memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(8888); inet_pton(AF_INET, "127.0.0.1", &sin.sin_addr); struct event_base* base = event_base_new(); struct bufferevent* bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE); bufferevent_setcb(bev, read_cb, NULL, event_cb, NULL); bufferevent_socket_connect(bev, (struct sockaddr*)&sin, sizeof(sin)); event_base_dispatch(base); return 0; } ``` 上述代码中,read_cb函数用于处理读取事件,当有数据可读时,先从输入缓冲区中读取一行数据,然后将该行数据发送回去,并释放内存空间。 event_cb函数则用于处理事件回调,当出现错误或连接断开时,会释放buffer_event对象。 在main函数中,通过创建bufferevent_socket_new对象并设置回调函数,然后使用bufferevent_socket_connect函数连接到服务器,最后通过event_base_dispatch函数进入事件循环。 注意:这里的回调函数只是示例,实际使用时需要根据具体需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值