B/S客户端和服务端进行数据校验的原因和必要性

客户端校验进行基本校验,如检验非空字段是否为空,数字可是是否正确等。客户端校验主要用于过滤用户的误操作。

客户端校验的作用是:拒绝误操作输入提交到服务器端处理,降低服务器端负担。

        服务器端校验也必不可少,服务器端校验防止非法数据进入程序,导致程序异常、地层数据库异常。

服务器端校验的作用:保证程序有效运行及数据完整的手段。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用libevent库实现TCP/IP客户端服务端通信,可以按照以下步骤进行: 1. 引入libevent库的头文件和链接库。 ```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") ``` 2. 创建服务端监听器并设置回调函数。 ```c struct event_base* base = event_base_new(); // 创建event_base对象 // 创建监听器 struct sockaddr_in sin; memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = htonl(INADDR_ANY); sin.sin_port = htons(8888); struct evconnlistener* listener = evconnlistener_new_bind(base, accept_cb, NULL, LEV_OPT_REUSEABLE | LEV_OPT_CLOSE_ON_FREE, 10, (struct sockaddr*)&sin, sizeof(sin)); // 设置回调函数 void accept_cb(struct evconnlistener* listener, evutil_socket_t fd, struct sockaddr* addr, int len, void* ptr) { struct event_base* base = evconnlistener_get_base(listener); struct bufferevent* bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE); bufferevent_setcb(bev, read_cb, NULL, event_cb, NULL); bufferevent_enable(bev, EV_READ | EV_WRITE); } ``` 3. 创建客户端并连接到服务端。 ```c 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)); ``` 4. 设置读写回调函数。 ```c void read_cb(struct bufferevent* bev, void* ctx) { struct evbuffer* input = bufferevent_get_input(bev); size_t len = evbuffer_get_length(input); char* data = (char*)malloc(len + 1); memset(data, 0, len + 1); evbuffer_copyout(input, data, len); printf("recv: %s\n", data); free(data); evbuffer_drain(input, len); } 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); } ``` 5. 启动事件循环。 ```c event_base_dispatch(base); ``` 这样就可以使用libevent库实现TCP/IP客户端服务端通信了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值