websocket可用于网页和vc程序进行交互,websocket需要opensll、boost库支持,所以需要先将以上两样下载配置好,然后下载websocket源码。
这里以下载的websocketpp-0.7.0\examples\echo_server为例子,在vs2013中新建一个win32程序,将echo server的代码拷贝到当前工程。
#include <websocketpp/config/asio_no_tls.hpp>
#include <websocketpp/server.hpp>
#include <iostream>
typedef websocketpp::server<websocketpp::config::asio> server;
using websocketpp::lib::placeholders::_1;
using websocketpp::lib::placeholders::_2;
using websocketpp::lib::bind;
// pull out the type of messages sent by our config
typedef server::message_ptr message_ptr;
// Define a callback to handle incoming messages
void on_message(server* s, websocketpp::connection_hdl hdl, message_ptr msg) {
std::cout << "on_message called with hdl: " << hdl.lock().get()
<< " and message: " << msg->get_payload()
<< std::endl;
// check for a special command to instruct the server to stop listening so
// it can be cleanly exited.
if (msg->get_payload() == "stop-listening") {
s->stop_listening();
return;
}
try {
s->send(hdl, msg->get_payload(), msg->get_opcode());
} catch (const websocketpp::lib::error_code& e) {
std::cout << "Echo failed because: " << e
<< "(" << e.message() << ")" << std::endl;
}
}
int main() {
// Create a server endpoint
server echo_server;
try {
// Set logging settings
echo_server.set_access_channels(websocketpp::log::alevel::all);
echo_server.clear_access_channels(websocketpp::log::alevel::frame_payload);
// Initialize Asio
echo_server.init_asio();
// Register our message handler
echo_server.set_message_handler(bind(&on_message,&echo_server,::_1,::_2));
// Listen on port 9002
echo_server.listen(9002);
// Start the server accept loop
echo_server.start_accept();
// Start the ASIO io_service run loop
echo_server.run();
} catch (websocketpp::exception const & e) {
std::cout << e.what() << std::endl;
} catch (...) {
std::cout << "other exception" << std::endl;
}
}
会有些报错,需要在项目属性–》配置属性–》VC++目录中设置好以下包含目录和库目录。
通过写一份html来调用:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<div>
<input type="submit" value="Start" onclick="start()"/>
</div>
<div id="messages"></div>
<script type="text/javascript">
var webSocket = new WebSocket('ws://localhost:9002');
webSocket.onerror = function(event){
onError(event)
};
webSocket.onopen = function(event){
onOpen(event)
};
webSocket.onmessage = function(event){
onMessage(event)
};
function onMessage(event){
document.getElementById('messages').innerHTML
+= '<br />Get Message From Server: ' + event.data;
}
function onOpen(event){
document.getElementById('messages').innerHTML
= 'Connection established';
}
function onError(event){
alert(event.data);
alert("error");
}
function start(){
webSocket.send('hello');
return false;
}
</script>
</body>
</html>
先运行vc程序,然后运行html,成功连接并发送消息。