Synchronous Chat Client &Server
来源:互联网 发布:matlab最优化工具箱 编辑:程序博客网 时间:2024/06/13 00:46
给一个使用boost asio 同步方法的Chat客户端和服务端的做法
Synchronous Chat Client
#include <string>#include <boost/asio.hpp>using namespace std;using boost::asio::ip::tcp;int main(){boost::asio::io_service io;tcp::resolver resolver(io);tcp::resolver::query query(tcp::v4(), "127.0.0.1", "1234");tcp::resolver::iterator iterator = resolver.resolve(query);tcp::socket sock(io);boost::asio::connect(sock, iterator);for(;;){string line;HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_GREEN | FOREGROUND_INTENSITY);//input text: greencout << "[Sent] ";do{//cannot send empty messagegetline(cin, line);}while(line.empty());sock.write_some(boost::asio::buffer(line));SetConsoleTextAttribute(handle, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);//output text: yellowchar reply[1024];memset(reply, 0, 1024);sock.read_some(boost::asio::buffer(reply, 1024));cout << "[Recieved] " << reply << endl << endl;}return 0;}
Synchronous Chat Server
#include <iostream>#include <boost/asio.hpp>#include <boost/thread.hpp>using namespace std;using boost::asio::ip::tcp;//使用信号量保证输出不会出现截断boost::mutex mutex;void session(tcp::socket* sock){mutex.lock();cout << "Client " << sock->remote_endpoint() << " Connecting..." << endl;mutex.unlock();char data[1024];for(;;){memset(data, 0, 1024);boost::system::error_code error;size_t lenght = sock->read_some(boost::asio::buffer(data), error);mutex.lock();cout << "Client " << sock->remote_endpoint() << " Said: " << data << endl;mutex.unlock();if (error == boost::asio::error::eof)break;//connection closed cleanly by peerelse if (error){mutex.lock();cerr << "Read Error: " << error.message() << endl;mutex.unlock();break;}sock->write_some(boost::asio::buffer(data), error);if(error){mutex.lock();cerr << "Write Error: " << error.message() << endl;mutex.unlock();break;}}mutex.lock();cout << "Client " << sock->remote_endpoint() << " Over" << endl << endl;mutex.unlock();delete sock;}int main(){boost::asio::io_service io;tcp::endpoint ep(tcp::v4(), 1234);tcp::acceptor acc(io, ep);//同步方法一般是开个线程与client通信,主线程继续acceptfor(;;){tcp::socket* sock = new tcp::socket(io);acc.accept(*sock);boost::thread(&session,sock).detach();}return 0;}
0 0
- Synchronous Chat Client &Server
- Synchronous Client/Server
- Chat Server with Client implemented in C#
- (OK) Linux epoll模型—socket epoll server client chat
- (OK) Linux epoll模型—socket epoll server client chat
- Creating A WPF Chat Client Server Application(一)
- (OK) Linux epoll模型—socket epoll server client chat—pthread
- (OK) Linux epoll模型—socket epoll server client chat—pthread
- tornado chat server
- PNP : Chat server
- Client/Server
- server&&client
- client server
- CHAT
- CHAT
- chat
- chat
- chat
- Codeforces Round #320 (Div. 2) - D. "Or" Game
- ExtJS4 grid复选框只有点击复选框才能选中
- OutputStream——OutputStream基本概念
- Unity3D实现鼠标选中“高亮”显示功能
- 开源项目ToggleButton源码分析
- Synchronous Chat Client &Server
- [SCOI2005]繁忙的都市
- 初级UnityDemo全纪录(二):代码篇①
- java的锁机制
- 细说JVM系列:JVM对象的创建、内存布局、访问
- XUtils的BitmapUtils实现分析:
- 寻找最大的K个数
- java笔记--day09--多态和继承的微弱区别
- npm 私服补充