boost::asio之(一)简单客户端服务器回显功能
客户端:
// BoostDev.cpp: 定义控制台应用程序的入口点。
// #include "stdafx.h" #include <iostream>
#include <boost/array.hpp>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
#include <boost/cerrno.hpp> size_t read_complete(char * buf, const boost::system::error_code & err, size_t bytes)
{
if (err) return ;
bool found = std::find(buf, buf + bytes, '\n') < buf + bytes
;
// 我们一个一个读取直到读到回车, 不缓存
return found ? : ;
}
void sync_echo(std::string msg) {
msg += "\n";
std::cout << msg << std::endl;
boost::asio::io_service service;
//boost::asio::ip::tcp::endpoint ep(boost::asio::ip::tcp::v4(), 2001); // listen on 2001
boost::asio::ip::tcp::endpoint ep(boost::asio::ip::address::from_string("127.0.0.1"),);
boost::asio::ip::tcp::socket sock(service);
sock.connect(ep);
sock.write_some(boost::asio::buffer(msg));
char buf[];
int bytes = read(sock, boost::asio::buffer(buf), boost::bind(read_complete, buf, _1, _2));
std::cout << bytes << std::endl;
std::string copy(buf, bytes - );
msg = msg.substr(, msg.size() - );
std::cout << "server echoed our " << msg << ": " << (copy == msg ? "OK" : "FAIL") << std::endl;
sock.close();
}
int main(int argc, char* argv[]) {
const char* messages[] = {"John says hi", "so does James", "Lucyjust got home", "Boost.Asio is Fun!", };
boost::thread_group threads;
for (const char ** message = messages; *message; ++message) {
threads.create_thread(boost::bind(sync_echo, *message));
boost::this_thread::sleep(boost::posix_time::millisec());
}
threads.join_all();
}
服务端:
// BoostSever.cpp: 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <ctime>
#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/thread.hpp> size_t read_complete(char * buff, const boost::system::error_code & err, size_t
bytes) {
if (err) return ;
bool found = std::find(buff, buff + bytes, '\n') < buff + bytes;
// 我们一个一个读取直到读到回车, 不缓存
return found ? : ;
}
void handle_connections() {
boost::asio::io_service service;
boost::asio::ip::tcp::acceptor acceptor(service, boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string("127.0.0.1"), ));
char buff[];
while (true) {
boost::asio::ip::tcp::socket sock(service);
acceptor.accept(sock);
int bytes = read(sock, boost::asio::buffer(buff), boost::bind(read_complete, buff, _1, _2));
std::cout << bytes << std::endl;
std::string msg(buff, bytes);
sock.write_some(boost::asio::buffer(msg));
sock.close();
}
}
int main(int argc, char* argv[]) {
handle_connections();
}
boost::asio之(一)简单客户端服务器回显功能的更多相关文章
- Linux 下 简单客户端服务器通讯模型(TCP)
原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include ...
- springmvc+ztree v3实现类似表单回显功能
在做权限管理系统时,可能会用到插件zTree v3,这是一个功能丰富强大的前端插件,应用很广泛,如异步加载菜单制作.下拉选择.权限分配等.在集成SpringMVC中,我分别实现了zTree的添删改查, ...
- (原创)如何使用boost.asio写一个简单的通信程序(二)
先说下上一篇文章中提到的保持io_service::run不退出的简单办法.因为只要异步事件队列中有事件,io_service::run就会一直阻塞不退出,所以只要保证异步事件队列中一直有事件就行了, ...
- (原创)如何使用boost.asio写一个简单的通信程序(一)
boost.asio相信很多人听说过,作为一个跨平台的通信库,它的性能是很出色的,然而它却谈不上好用,里面有很多地方稍不注意就会出错,要正确的用好asio还是需要花一番精力去学习和实践的,本文将通过介 ...
- 5.4.1 termios结构,关闭回显功能,一键入字符fgetc立刻返回,不用按下回车键
Linux提供了一组编程接口,用来控制终端驱动程序的行为.这样我们可以更精细的来控制终端. 例如: 回显:允许控制字符的回显,例如读取密码时. 使用termios结构的密码程序 #include &l ...
- activiti官网实例项目activiti-explorer之扩展多选框回显功能
相关参考链接:https://blog.csdn.net/murongxuesheng/article/details/76147380 回显:确认选中属性ng-model,循环属性ng-repeat ...
- HTML、jsp页面中radio,checkbox,select数据回显功能,默认被选中问题
最近常常遇到各种复选框.单选框.下拉框的默认被选中的问题,开始也是绞尽脑汁的想办法,今天写一篇学习总结的博文来写一下学习总结. 单选框(radio)默认被选中: 一.jstl技术进行回显 <in ...
- unp TCP 客户端服务器回射程序中对SIGCHLD信号的处理
第五章中,有一个例子模拟客户端并发的终止TCP连接,服务器捕捉并处理SIGCHLD信号并调用waitpid函数防止僵死进程的出现.信号处理函数中核心的一句是: , &statloc, WNOH ...
- <select>改造成<s:select>实现表单的回显功能
初始: <select name="viewType"> <option value="0">全部主题</option> & ...
随机推荐
- Web自动化
# -*- coding:utf-8 -*- ''' Created on Oct 17, 2018 @author: SaShuangYiBing Comment: ''' from seleniu ...
- 关于使用jquery修改hover伪标签的样式
HTML如下: <div class=".nav-subitem"> <div classs="nav-subitem-link">标题 ...
- 寒假集训——搜索 D - Cubes for Masha
#include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h&g ...
- 转://oracle 11G+ASM for Linux手工建库
环境描述 环境:Oracle Linux 6.5 + ORACLE 11g R2+ASM ORACLE的程序已经安装完毕.但是没有创建任何数据库. 实验内容 安装ORACLE11g数据库,不使用DBC ...
- 一个网工的Linux学习过程
机缘巧合下,在快要毕业时找到了一份网络工程师的工作,对于学习通信工程的我来说,也不算是跨专业就业吧.在入职之前也了解了一下网络工程师的学习路径,网络工程师是从事计算机信息系统的设计.建设.运行和维护工 ...
- AI 线性回归
线性回归(Linear Regression),顾名思义,输出是输入的线性函数.因为通常会附加偏置(bias)参数,所以实际是仿射函数. 参考链接: http://cs229.stanford.edu ...
- android 给LinearLayout中添加一定数量的控件,并让着一定数量的控件从右到左移动,每隔若干秒停顿一下,最后一个view链接第一个view,然后继续移动循环往复,形成一个死循环简单动画效果
主类:IndexAnimationLinearLayout.java package com.yw.sortlistview; import java.util.ArrayList; import j ...
- ELF格式文件分析以及运用
基于本文的一个实践<使用Python分析ELF文件优化Flash和Sram空间的案例>. 1.背景 ELF是Executable and Linkable Format缩写,其官方规范在& ...
- sql实时提交事务
public void deleteByHbtlidAndDept(String class_id,String depart_id) { Session session = this.getHibe ...
- Maven学习笔记-04-Eclipse下maven项目在Tomcat7和Jetty6中部署调试
现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...