网络编程"/>
C++ 使用Poco库进行网络编程
C++ 使用Poco库进行网络编程
flyfish
IP地址和端口
方式一
Poco::Net::SocketAddress sa("127.0.0.1",2001);
Poco::Net::StreamSocket ss;
Poco::Timespan timeout(3000000);//microseconds = 3s
ss.connect(sa,timeout);
方式二
std::string server_ip="127.0.0.1";
Poco::UInt16 server_port= 2001;
Poco::Timespan timeout(3000000);//microseconds = 3s
Poco::Net::SocketAddress sa(server_ip, server_port);
Poco::Net::StreamSocket ss;
ss.connect(sa,timeout);
DNS
const Poco::Net::HostEntry& entry = Poco::Net::DNS::hostByName("www.example");
std::cout << "Entry Name: " << entry.name() << std::endl;
const HostEntry::AliasList& aliases = entry.aliases();
Poco::Net::HostEntry::AliasList::const_iterator it = aliases.begin();
for (; it != aliases.end(); ++it)std::cout << "Alias: " << *it << std::endl;const Poco::Net::HostEntry::AddressList& addrs = entry.addresses();Poco::Net::HostEntry::AddressList::const_iterator it_a = addrs.begin();
for (; it_a != addrs.end(); ++it_a)std::cout << "Address: " << it_a->toString() << std::endl;
return 0;
输出内容类似如下
Entry Name: ww1.sinaimg.w.alikunlun
Address: 27.221.120.146
Address: 119.167.169.194
Address: 2408:8719:3200:1:3::3eb
Address: 2408:8719:3200:1:3::3ec
TCP Poco::Net::StreamSocket
Poco::Net::SocketAddress sa("www.example", 80);
Poco::Net::StreamSocket socket(sa);
Poco::Net::SocketStream str(socket);
str << "GET / HTTP/1.1\r\n""Host: www.baidu\r\n""\r\n";
str.flush();
Poco::StreamCopier::copyStream(str, std::cout);
UDP Client
Poco::Net::SocketAddress sa("127.0.0.1", 2001);
Poco::Net::DatagramSocket dgs;
dgs.connect(sa);
Poco::Timestamp now;
std::string msg = Poco::DateTimeFormatter::format(now,"<14>%w %f %H:%M:%S Hello, world!");
dgs.sendBytes(msg.data(), msg.size());
UDP Server
Poco::Net::SocketAddress sa(Poco::Net::IPAddress(), 2001);Poco::Net::DatagramSocket dgs;
dgs.bind(sa);char buffer[1024];
for (;;)
{Poco::Net::SocketAddress sender;int n = dgs.receiveFrom(buffer, sizeof(buffer)-1, sender);buffer[n] = '\0';std::cout << sender.toString() << ": " << buffer << std::endl;
}
NetworkInterface
Poco::Net::NetworkInterface::NetworkInterfaceList list = Poco::Net::NetworkInterface::list();
if (!list.empty())
{for (Poco::Net::NetworkInterface::NetworkInterfaceList::const_iterator it = list.begin(); it != list.end(); ++it){std::cout << "Name: " << it->name() << std::endl;std::cout << "DisplayName: " << it->displayName() << std::endl;std::cout << "Address: " << it->address().toString() << std::endl;std::cout << "Subnet: " << it->subnetMask().toString() << std::endl;std::cout << "Broadcast: " << it->broadcastAddress().toString() << std::endl;std::cout << "Index: " << it->index() << std::endl;}
}
头文件
#include <iostream>
#include <string>
#include <streambuf>#include <Poco/Net/NetException.h>
#include <Poco/Net/SocketAddress.h>
#include <Poco/Net/StreamSocket.h>
#include <Poco/Net/SocketStream.h>
#include <Poco/Net/DatagramSocket.h>#include <Poco/Net/HTTPClientSession.h>
#include <Poco/Net/HTTPCredentials.h>
#include <Poco/Net/HTMLForm.h>
#include <Poco/Net/HTTPBasicCredentials.h>
#include <Poco/Net/FilePartSource.h>
#include <Poco/Net/HTTPRequest.h>
#include <Poco/Net/HTTPResponse.h>#include <Poco/URI.h>
#include <Poco/Timestamp.h>
#include <Poco/DateTimeFormatter.h>#include <Poco/BinaryReader.h>
#include <Poco/StreamConverter.h>
#include <Poco/StreamCopier.h>
编译参考
cmake_minimum_required(VERSION 3.5)project(example LANGUAGES CXX)set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# set the POCO paths and libs
set(POCO_PREFIX "/home/source/lib") # the directory containing "include" and "lib"
set(POCO_INCLUDE_DIR "${POCO_PREFIX}/include")
set(POCO_LIB_DIR "${POCO_PREFIX}/lib")
set(POCO_LIBS"${POCO_LIB_DIR}/libPocoNet.so""${POCO_LIB_DIR}/libPocoUtil.so""${POCO_LIB_DIR}/libPocoFoundation.so""${POCO_LIB_DIR}/libPocoNetSSL.so")include_directories(${POCO_INCLUDE_DIR})add_executable(examplemain.cpp
)
target_link_libraries(example "${POCO_LIBS}" -pthread -lm -ldl)
更多推荐
C++ 使用Poco库进行网络编程
发布评论