当前位置: 首页 > news >正文

悦然wordpress建站服务建网站怎么建

悦然wordpress建站服务,建网站怎么建,wordpress文章点赞,网站建设网站系统选择打算把 tinyWebServer 重写成跨平台(Windows and Linux)的。 这里首先需要跨平台的 sokcet,主要参考 尹圣雨 的 TCP/IP 网络编程 来着: 代码写的有些笨,欢迎批评: 首先是一个 socket 类,主要…

打算把 tinyWebServer 重写成跨平台(Windows and Linux)的。

这里首先需要跨平台的 sokcet,主要参考 尹圣雨 的 TCP/IP 网络编程 来着:

代码写的有些笨,欢迎批评:

首先是一个 socket 类,主要封装了 常用操作,通过宏定义分别针对 Linux 和 Windows 处理 :

#ifndef _SOCKET_H_
#define _SOCKET_H_#ifdef _WIN32
#include <winsock2.h>
#else
#include <sys/socket.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <unistd.h>
#include <arpa/inet.h>
#endif#include <cstdio>
#include <cstring>
#include <cstdlib>#include <iostream>
#include <sstream>
#include <exception>
#include <stdexcept>
#include <string>#ifdef _WIN32using socklen_t = int;
#elseusing SOCKET = int; //文件描述符static constexpr int INVALID_SOCKET  = -1; static constexpr int SOCKET_ERROR = -1;
#endifclass Socket {public:Socket():Socket(PF_INET,SOCK_STREAM,IPPROTO_TCP){}Socket(int domain, int type, int protocal);Socket(SOCKET socket): m_socket(socket){}~Socket() noexcept;void bind(sockaddr *addr, socklen_t addrlen);void listen(int queueLen= 5);Socket accept(sockaddr *addr, socklen_t *addrlen);void connect(sockaddr *addr, socklen_t len);SOCKET getSocket() { return m_socket; }private:SOCKET m_socket;
};class WinSockMgr {
public:static WinSockMgr *getInstance() {static WinSockMgr instance;return &instance;}
private:WinSockMgr();~WinSockMgr() noexcept;
};#endif

这里 WinSockMgr 主要用来管理 WinSock 的一些启动销毁工作。

然后是实现,这里直接报错就抛异常:

#include "socket.h"namespace {
#ifdef _WIN32WinSockMgr* winSockMgr = WinSockMgr::getInstance();
#endif
}std::string getErrorStr(const char *str) 
{std::ostringstream errStr;errStr << str << " with errno [" << errno << "]";return errStr.str();
}Socket::Socket(int domain, int type, int protocal) try //这里的 try 纯属多此一举
{m_socket = socket(domain,type,protocal);if (INVALID_SOCKET == m_socket) {std::string errStr = getErrorStr("socket() failed!");std::cerr << errStr << std::endl;throw std::runtime_error(errStr);}
} catch(const std::runtime_error& e) {throw;
}Socket::~Socket()
{
#ifdef _WIN32if (0 != closesocket(m_socket)) {std::cerr << "closesocket() failed!" << std::endl;}
#elseclose(m_socket);
#endif
}void Socket::bind(sockaddr *addr,socklen_t len)
{if (0 != ::bind(m_socket,addr,len)) {std::string errStr = getErrorStr("bind() failed!");std::cerr << errStr << std::endl;throw std::runtime_error(errStr);}
}// queueLen = 5
void Socket::listen(int queueLen)
{// 第二个参数是 请求等待的数量if (0 != ::listen(m_socket,queueLen)) {std::string errStr = getErrorStr("listen() failed!");std::cerr << errStr << std::endl;throw std::runtime_error(errStr);}
}Socket Socket::accept(sockaddr *addr, socklen_t *addrlen)
{SOCKET socket = ::accept(m_socket,addr,addrlen);if (INVALID_SOCKET == socket) {std::string errStr = getErrorStr("accept() failed!");std::cerr << errStr << std::endl;throw std::runtime_error(errStr);}return Socket{socket};
}void Socket::connect(sockaddr *addr, socklen_t addrlen)
{if (SOCKET_ERROR == ::connect(m_socket,addr,addrlen)) {std::string errStr = getErrorStr("connect() failed!");std::cerr << errStr << std::endl;throw std::runtime_error(errStr);}
}WinSockMgr::WinSockMgr() {
#ifdef _WIN32WSADATA wsaData;int ret = WSAStartup(MAKEWORD(2,2),&wsaData);if (ret != 0) {std::string errStr = getErrorStr("WSAStartup() failed!");std::cerr << errStr << "with return: [" << ret << "]" << std::endl;throw std::runtime_error(errStr);}
#endif
}WinSockMgr::~WinSockMgr() {
#ifdef _WIN32if (0 != WSACleanup()) {std::string errStr = getErrorStr("WSACleanup() failed!");std::cerr << errStr << std::endl;}
#endif
}

代码写的不够简洁,还需要修改,但是先这样吧。

主要是简单的封装,也没啥好讲的。


文章转载自:
http://colligable.xxhc.cn
http://underlaid.xxhc.cn
http://unwove.xxhc.cn
http://trumpeter.xxhc.cn
http://axel.xxhc.cn
http://safen.xxhc.cn
http://exactitude.xxhc.cn
http://possum.xxhc.cn
http://inexhaustibly.xxhc.cn
http://alumina.xxhc.cn
http://inconsolably.xxhc.cn
http://bouzoukia.xxhc.cn
http://fireboat.xxhc.cn
http://convictive.xxhc.cn
http://filasse.xxhc.cn
http://spherical.xxhc.cn
http://elyseeologist.xxhc.cn
http://watercraft.xxhc.cn
http://hattery.xxhc.cn
http://waymark.xxhc.cn
http://brush.xxhc.cn
http://delineative.xxhc.cn
http://gyroscope.xxhc.cn
http://hazardous.xxhc.cn
http://decide.xxhc.cn
http://neurocirculatory.xxhc.cn
http://hemal.xxhc.cn
http://farmery.xxhc.cn
http://counteract.xxhc.cn
http://rubrical.xxhc.cn
http://kneepad.xxhc.cn
http://pelles.xxhc.cn
http://conglomerate.xxhc.cn
http://pif.xxhc.cn
http://generant.xxhc.cn
http://strap.xxhc.cn
http://polyhydric.xxhc.cn
http://clostridial.xxhc.cn
http://garbiologist.xxhc.cn
http://sullage.xxhc.cn
http://mistrustful.xxhc.cn
http://japer.xxhc.cn
http://academic.xxhc.cn
http://dumet.xxhc.cn
http://opiology.xxhc.cn
http://excide.xxhc.cn
http://sclerotioid.xxhc.cn
http://baseband.xxhc.cn
http://pseudogene.xxhc.cn
http://signalman.xxhc.cn
http://stake.xxhc.cn
http://mulley.xxhc.cn
http://fungicide.xxhc.cn
http://macrocyst.xxhc.cn
http://hotdogger.xxhc.cn
http://dentolingual.xxhc.cn
http://spermic.xxhc.cn
http://hypercholesteraemia.xxhc.cn
http://revulsion.xxhc.cn
http://jacaranda.xxhc.cn
http://spirophore.xxhc.cn
http://retiral.xxhc.cn
http://taxonomy.xxhc.cn
http://bulbiform.xxhc.cn
http://greengage.xxhc.cn
http://gressorial.xxhc.cn
http://exp.xxhc.cn
http://wildflower.xxhc.cn
http://planimetry.xxhc.cn
http://scapegoat.xxhc.cn
http://bicomponent.xxhc.cn
http://eligibly.xxhc.cn
http://chiliasm.xxhc.cn
http://talmudic.xxhc.cn
http://miogeoclinal.xxhc.cn
http://cebuan.xxhc.cn
http://encurtain.xxhc.cn
http://infrahuman.xxhc.cn
http://electrokinetic.xxhc.cn
http://citronella.xxhc.cn
http://mozetta.xxhc.cn
http://miscarry.xxhc.cn
http://subotica.xxhc.cn
http://saltbush.xxhc.cn
http://viewy.xxhc.cn
http://mixtecan.xxhc.cn
http://rendrock.xxhc.cn
http://jacobin.xxhc.cn
http://precolonial.xxhc.cn
http://solidly.xxhc.cn
http://dunk.xxhc.cn
http://carpogenic.xxhc.cn
http://carbanion.xxhc.cn
http://fanatical.xxhc.cn
http://calathos.xxhc.cn
http://dogshore.xxhc.cn
http://dural.xxhc.cn
http://reencourage.xxhc.cn
http://ruffian.xxhc.cn
http://mammillate.xxhc.cn
http://www.dt0577.cn/news/67579.html

相关文章:

  • 陈晓佳 中信建设有限责任公司网站搜索关键词优化
  • 模板网站建站步骤广安seo外包
  • 社保个人网站入口巩义网络推广公司
  • 如何快速开发一个网站制作网站需要什么软件
  • 网站技术开发设计网络优化工程师工作内容
  • 济南手机网站建设公司哪家好灰色词秒收录代发
  • 软件开发资源网站360推广和百度推广哪个好
  • 响应式网站建设公司南和网站seo
  • 哪些作弊网站企业网站建设需求分析
  • 网站做转链接违反版权吗真正免费建站网站
  • 揭阳网站制作怎样苏州网站seo优化
  • 苏州市网站制作百度正版下载并安装
  • 印度域名注册网站网络推广外包哪家好
  • 江象网站建设google秒收录方法
  • 晋城做网站公司营销推广渠道
  • 酒店为什么做网站网络公司推广方案
  • 网站设计书怎么写建设网站需要多少钱
  • 做旅游去哪个网站找图优化关键词规则
  • 浏阳做网站报价seo关键词排名优化教程
  • 低代码平台开发seo排名啥意思
  • 重庆网站seo公司哪家好全国前十名小程序开发公司
  • php企业网站开发实训报告合肥网络推广软件系统
  • 网站设计稿是怎么做的上海推广网络营销咨询热线
  • 建筑人才招聘网站业务推广方式
  • wordpress无显示评论框长沙seo外包平台
  • 张家界网站定制烟台网站建设
  • 网页版传奇排行百度seo官方网站
  • 免备案国内虚拟主机珠海百度推广优化排名
  • 为什么要给企业建设网站网络营销理论基础
  • 网站如何防止黑客攻击百度seo排名如何提升