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

手工建站与模板网站的区别在线制作网站的平台

手工建站与模板网站的区别,在线制作网站的平台,网络推广法,wordpress用于商业TCP#xff08;传输控制协议#xff09;网络通信是常见的网络应用形式#xff0c;它提供了面向连接的、可靠的数据传输服务。TCP通信常用的接口主要包括以下几个方面#xff1a; 常用接口 1. socket() int socket(int domain, int type, int protocol); 功能#xff1…TCP传输控制协议网络通信是常见的网络应用形式它提供了面向连接的、可靠的数据传输服务。TCP通信常用的接口主要包括以下几个方面 常用接口 1. socket() int socket(int domain, int type, int protocol); 功能打开一个网络通讯端口并返回一个文件描述符socket描述符。参数 domain地址族对于IPv4指定为AF_INET。type套接字类型对于TCP协议指定为SOCK_STREAM表示面向流的传输协议。protocol传输层协议类型对于TCP通常指定为0。返回值成功时返回文件描述符非负整数失败时返回-1。 2. bind() int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);功能将套接字与特定的网络地址IP地址和端口号绑定。参数 sockfd由socket()返回的文件描述符。myaddr指向sockaddr结构体的指针包含要绑定的地址和端口信息。addrlen地址结构体的长度。返回值成功时返回0失败时返回-1。 3. listen() int listen(int sockfd, int backlog); 功能使服务器端的套接字进入监听状态准备接受客户端的连接请求。参数 sockfd服务器端的套接字描述符。backlog设置等待连接队列的最大长度。返回值成功时返回0失败时返回-1。 4. accept() int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); 功能接受一个客户端的连接请求并返回一个新的套接字描述符用于与该客户端进行通信。参数 sockfd服务器端的监听套接字描述符。addr可选参数用于存储客户端的地址信息。addrlen传入时表示addr的长度传出时表示实际存储的客户端地址信息的长度。返回值成功时返回新的套接字描述符失败时返回-1。 5. connect() int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);功能客户端调用用于建立与服务器端的连接。参数 sockfd客户端的套接字描述符。addr指向服务器地址信息的sockaddr结构体指针。addrlen服务器地址结构体的长度。返回值成功时返回0失败时返回-1。 6. send() 和 recv() ssize_t recv(int sockfd, void *buf, size_t len, int flags);ssize_t send(int sockfd, const void *buf, size_t len, int flags); 功能 send()用于向连接的套接字发送数据。recv()用于从连接的套接字接收数据。参数 sockfd套接字描述符。buf指向数据缓冲区的指针。len要发送或接收的数据长度。flags通常设置为0表示默认行为。返回值 对于send()成功时返回实际发送的字节数失败时返回-1。对于recv()成功时返回实际接收的字节数如果连接已关闭且没有数据可读则返回0出错时返回-1。 7. close() int close(int fd); 功能关闭套接字释放相关资源。参数套接字描述符。返回值成功时返回0失败时返回-1。 回显打印熟悉一下接口 大致流程 TCP服务器端流程 创建套接字socket绑定套接字bind监听连接listen接受连接accept数据传输send/recv关闭套接字close TCP客户端流程 创建套接字socket连接服务器connect数据传输send/recv关闭套接字close 代码 ServerMain.cpp 服务器的主函数 #include TcpServer.hpp #includememory int main(int argc, char *argv[]) {if (argc ! 2){std::cerr Usage: argv[0] local-port std::endl;exit(0);}uint16_t port std::stoi(argv[1]);std::unique_ptrTcpserver tsvr std::make_uniqueTcpserver(port);tsvr-Initserver();tsvr-Loop();return 0; } TcpServer.hpp  对Tcp操作分装 #pragma once #include iostream #include string #include cstring #include unistd.h #include sys/socket.h #include sys/types.h #include arpa/inet.h #include netinet/in.h #include InterAddr.hpp #include Threadpool.hpp enum {SOCKET_ERROR 1,BIND_ERROR,LISTEN_ERROR }; static const uint16_t gport 8888; static const int glisten -1; static const int gbacklog 8; using task_t std::functionvoid(); class Tcpserver { public:Tcpserver(uint16_t port gport): _port(port), _listensockfd(glisten), _isrunning(false){}void Initserver(){_listensockfd ::socket(AF_INET, SOCK_STREAM, 0);if (_listensockfd 0){std::cout socket error std::endl;exit(SOCKET_ERROR);}struct sockaddr_in local;memset(local, 0, sizeof(local));local.sin_family AF_INET;local.sin_port htons(_port);local.sin_addr.s_addr INADDR_ANY;if (bind(_listensockfd, (const sockaddr *)local, sizeof(local)) 0){std::cout bind error std::endl;exit(BIND_ERROR);}if (::listen(_listensockfd, gbacklog) 0){std::cout listen error std::endl;exit(LISTEN_ERROR);}std::cout init success std::endl;}void Loop(){_isrunning true;while (true){struct sockaddr_in client;socklen_t len sizeof(client);int sockfd ::accept(_listensockfd, (struct sockaddr *)client, len);if (sockfd 0){std::cout accpet error std::endl;exit(1);}InterAddr addr(client);std::coutget a new link, client infoaddr.AddrStr()std::endl;task_t f std::bind(Tcpserver::Service, this, sockfd, addr);ThreadPooltask_t::GetInstance()-Equeue(f);}_isrunning false;}void Service(int sockfd, InterAddr addr){while (true){char buffer[1024];ssize_t m ::read(sockfd, buffer, sizeof(buffer) - 1);if (m 0){buffer[m] 0;std::string echoserver [server echo]#;echoserver buffer;::write(sockfd, echoserver.c_str(), echoserver.size());}else if (m 0){std::cout clent quit addr.AddrStr() std::endl;break;}else{std::cout read error std::endl;exit(1);}}::close(sockfd);}~Tcpserver(){}private:uint16_t _port;int _listensockfd;bool _isrunning; }; InterAddr.hpp LockGuard.hpp Thread.hpp Threadpool.hpp 字节序和线程池 //interaddr.hpp #pragma once #include iostream #include string #include sys/types.h #include sys/socket.h #include arpa/inet.h #include netinet/in.h class InterAddr { private:void ToHost(const struct sockaddr_in addr){port ntohl(addr.sin_port);ip inet_ntoa(addr.sin_addr);}private:std::string ip;uint16_t port;struct sockaddr_in _addr;public:InterAddr(const struct sockaddr_in addr): _addr(addr){ToHost(addr);}bool operator (const InterAddr t){return (this-ip t.ip this-port t.port);}std::string Ip(){return ip;}uint16_t Port(){return port;}struct sockaddr_in Addr(){return _addr;}std::string AddrStr(){return ip : std::to_string(port);}~InterAddr(){} };//LockGuard.hpp #pragma once #includepthread.h class LockGuard { private:/* data */pthread_mutex_t* _mutex; public:LockGuard(pthread_mutex_t* mutex);~LockGuard(); };LockGuard::LockGuard(pthread_mutex_t* mutex):_mutex(mutex) {pthread_mutex_lock(_mutex); }LockGuard::~LockGuard() {pthread_mutex_unlock(_mutex); }//Thread.hpp #pragma once #include iostream #include string #include pthread.h #include functional namespace ThreadMoudle {using func_t std::functionvoid(const std::string );class Thread{public:void Execute(){isrunning true;_func(_name);isrunning false;}public:Thread(const std::string name, func_t func): _name(name), _func(func){}static void *ThreadRoutine(void *args){Thread *a static_castThread *(args);a-Execute();return nullptr;}bool Start(){int n pthread_create(_tid, nullptr, ThreadRoutine, (void *)this);if (n ! 0){return false;}else{return true;}}std::string Status(){if (isrunning){return running;}else{return stop;}}void Stop(){if (isrunning){pthread_cancel(_tid);isrunning false;}}void Join(){pthread_join(_tid, nullptr);}std::string Name(){return _name;}~Thread(){}private:std::string _name;pthread_t _tid;bool isrunning;func_t _func;};} //Threadpool.hpp #pragma once #include iostream #include unistd.h #include string #include vector #include queue #include functional #include LockGuard.hpp #include Thread.hpp using namespace ThreadMoudle; static const int gdefaultnum 5; // pthread_mutex_t _fmtxPTHREAD_MUTEX_INITIALIZER; template class T class ThreadPool { private:void LockQueue(){pthread_mutex_lock(_mutex);}void UnlockQueue(){pthread_mutex_unlock(_mutex);}void Wakeup(){pthread_cond_signal(_cond);}void WakeupAll(){pthread_cond_broadcast(_cond);}void Sleep(){pthread_cond_wait(_cond,_mutex);}bool IsEmpty(){return _task_queue.empty();}void HandlerTask(const std::string name){while (1){LockQueue();while (IsEmpty() _isrunning){sleep_thread_num;Sleep();sleep_thread_num--;}if (IsEmpty() !_isrunning){UnlockQueue();break;}T t _task_queue.front();// std::couttstd::endl;_task_queue.pop();UnlockQueue();// LockGuard lockguard(_fmtx);t();}}void Init(){func_t func std::bind(ThreadPool::HandlerTask, this, std::placeholders::_1);for (int i 0; i _thread_num; i){std::string name Thread- std::to_string(i 1);_threads.emplace_back(name, func);}}void Start(){_isrunning true;for (auto threadd : _threads){threadd.Start();}}ThreadPool(int thread_num gdefaultnum): _thread_num(thread_num), _isrunning(false), sleep_thread_num(0){pthread_mutex_init(_mutex, nullptr);pthread_cond_init(_cond, nullptr);}ThreadPool(const ThreadPoolT ) delete;void operator(const ThreadPoolT ) delete;public:void Stop(){LockQueue();_isrunning false;WakeupAll();UnlockQueue();}static ThreadPoolT *GetInstance(){LockGuard lockguard(_sig_mutex);if (_tp nullptr){_tp new ThreadPool();_tp-Init();_tp-Start();}return _tp;}void Equeue(const T in){LockQueue();if (_isrunning){_task_queue.push(in);if (sleep_thread_num 0){Wakeup();}}UnlockQueue();}~ThreadPool(){pthread_mutex_destroy(_mutex);pthread_cond_destroy(_cond);}private:int _thread_num;std::vectorThread _threads;std::queueT _task_queue;bool _isrunning;int sleep_thread_num;pthread_mutex_t _mutex;pthread_cond_t _cond;static ThreadPoolT *_tp;static pthread_mutex_t _sig_mutex; };template class T ThreadPoolT *ThreadPoolT::_tp nullptr; template class T pthread_mutex_t ThreadPoolT::_sig_mutex PTHREAD_MUTEX_INITIALIZER; ClienMain.cpp 客户端 #include iostream #include string #include cstring #include sys/socket.h #include sys/types.h #include arpa/inet.h #include netinet/in.h #include unistd.h #include InterAddr.hpp int main(int argc, char *argv[]) {if (argc ! 3){std::cerr Usage: argv[0] server-ip local-port std::endl;exit(0);}std::string serverip argv[1];uint16_t port std::stoi(argv[2]);int sockfd ::socket(AF_INET, SOCK_STREAM, 0);if (sockfd 0){std::cerr socket error std::endl;exit(1);}struct sockaddr_in server;server.sin_family AF_INET;server.sin_port htons(port);if (::inet_pton(AF_INET, serverip.c_str(), server.sin_addr.s_addr) 0){std::cerr inet_pton error std::endl;exit(1);}if (::connect(sockfd, (const struct sockaddr *)server, sizeof(server)) 0){std::cerr connect error std::endl;exit(1);}while (true){std::string message;std::coutEnter #;std::getline(std::cin,message);::write(sockfd,message.c_str(),message.size());char buffer[1024];int n::read(sockfd,buffer,sizeof(buffer));if(n 0){buffer[n] 0;std::cout buffer std::endl;}else{break;}}::close(sockfd);return 0; }
http://www.tj-hxxt.cn/news/132535.html

相关文章:

  • 个人做跨境电商的平台网站有哪些网站主题定位
  • 下列哪个网站不属于sns(社交网络)深圳网站设计收费标准
  • 北京人才招聘网站elgg与wordpress对比
  • 传奇网站怎么制作教程网站开发 策划是干嘛的
  • 网站建设 加盟网站建设需要怎么做
  • 注册服务器网站哪个好phpcms做装修网站
  • 怎样给网站做优化中国建筑集团有限公司排名
  • jsp mysql 网站开发百度收录网站要多久
  • 用php做的网站模版采集网站开发
  • 劳务 东莞网站建设网站建设 苏州
  • 制作网站需要哪些素材营销型网站制作多少钱
  • 网站seo排名优化方法域名注册多少钱
  • 曲靖网站推广做哪方面的网站好呢
  • 罗湖商城网站设计0735郴州招聘信息网
  • 更新网站内容有什么用互联网站备案表
  • 自己可以建设网站吗微信扫码即可打开的网站如何做
  • 免费刷粉网站推广设计公司展厅装修
  • 网站建设微信公众号广告片拍摄制作公司
  • 建设一个下载资料的网站企业网站模板 首页大图
  • 专业网站设计公司个人简历word可编辑免费
  • 网站含中国的备案小程序商城推广哪家好
  • 官网网站搭建需要多少钱网站被墙查询
  • 网站链接推广怎么做杭州做网站hzyze
  • 汉中专业网站建设服务佛山新网站建设报价
  • 石家庄网站开发哪家好wordpress 图片选择器
  • wordpress课件站模板android应用开发期末考试题
  • 自己做的网站打开空白汕头免费建站哪里有
  • 深圳网址网站建设公司福州市有哪些制作网站公司
  • 国内工程机械行业网站建设现状html制作网页的代码
  • 好看的网站都找谁做的手机网站建设czyzj