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

潍坊网站建设方案东莞网页设计制作

潍坊网站建设方案,东莞网页设计制作,那些网站是做俄罗斯鞋子,网站建设和推广大概需要多少费用目录 前言 1.接口介绍 2.编写服务器 3.编写客户端 4.编译链接 5.测试 6.总结 前言 今天我们要介绍的是使用TCP协议实现数据通信#xff0c;相比于之前写的UDP服务器实现数据信#xff0c;在主体逻辑上并没有差别。客户端向服务器发送信息#xff0c;服务器接受信息并回…目录 前言 1.接口介绍 2.编写服务器 3.编写客户端 4.编译链接 5.测试 6.总结 前言 今天我们要介绍的是使用TCP协议实现数据通信相比于之前写的UDP服务器实现数据信在主体逻辑上并没有差别。客户端向服务器发送信息服务器接受信息并回显因为UDP是面向数据报而TCP是面向连接的所以在实现的时候接口上会有一些差别下面我们具体来看看UDP和TCP在编码的实现上有什么不同。 1.接口介绍 因为TCP是面向连接的所以服务器创建完套接字然后绑定成功后将套接字设置为监听套接字 服务器启动之后首先需要根据监听套接字建立连接建立连接成功后返回一个新的文件描述符后续的通信都是按照这个新的文件描述符按照读写文件的形式进行读写数据。 对于客户端来说创建完套接字之后客户端启动之后首先需要建立连接 listen():设置sock为监听状态 #include sys/types.h #include sys/socket.hint listen(int sockfd, int backlog); sockfd:创建套接字的返回值 backlog:底层全连接队列的长度 accept()服务端建立连接 #include sys/types.h #include sys/socket.hint accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);sockfd:监听套接字 struct sockaddr* addr:输出型参数可以获取服务端的IP地址和port端口号 socklen_t* addrlen:结构体的大小 返回值返回一个新打开的文件描述符 connect():客户端建立连接 #include sys/types.h #include sys/socket.h int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);sockfd:创建套接字返回值 struct sockaddr* addr:输出型参数用来填写需要访问的服务端的IP地址和port端口号 socklen_t addrlen:结构体的大小 2.编写服务器 tcpServer.hpp #pragma once#include iostream #include string #include cstring #include sys/types.h #include sys/socket.h #include netinet/in.h #include arpa/inet.h #include unistd.h #include log.hpp namespace server {using namespace std;enum{USAGE_ERR 1,SOCKET_ERR,BIND_ERR,LISTEN_ERR};static const uint16_t gport 8080;static const int gback 5;class TcpServer{public:TcpServer(const uint16_t port gport): _port(gport), _sock(-1){}void InitServer(){_sock socket(AF_INET, SOCK_STREAM, 0);if (_sock 0){logMessage(FATAL, create socket error);exit(SOCKET_ERR);}logMessage(NORMAL, create socket success);// 绑定struct sockaddr_in local;local.sin_family AF_INET;local.sin_port htons(_port);local.sin_addr.s_addr INADDR_ANY;if (bind(_sock, (struct sockaddr *)local, sizeof(local)) 0){logMessage(FATAL, bind socket error);exit(BIND_ERR);}logMessage(NORMAL, bind socket success);// 设置sock为监听状态if (listen(_sock, gback) 0){logMessage(FATAL, listen socket error);exit(LISTEN_ERR);}logMessage(NORMAL, listen socket success);}void start(){for (;;){// 建立连接struct sockaddr_in peer;socklen_t len sizeof(peer);int sock accept(_sock, (struct sockaddr *)peer, len); if (sock 0){logMessage(ERROR, accept error, next);continue;}logMessage(NORMAL, accept a new link success);std::cout sock: sock std::endl;//未来通信全部用sock,面向字节流的后续全部都是文件操作serviceIO(sock);close(sock);}}void serviceIO(int sock){char buffer[1024];while(true){ssize_t n read(sock,buffer,sizeof(buffer)-1);if(n 0){buffer[n] 0;cout recvice message: buffer endl;string outbuffer buffer;outbuffer [server echo];write(sock,outbuffer.c_str(),outbuffer.size());}else if(n 0){// 代表client退出logMessage(NORMAL, client quit, me too!);break;}}}~TcpServer(){}private:int _sock;uint16_t _port;}; } tcpServer.cc:启动服务器 #includetcpServer.hpp #includememory using namespace server; static void Usage(string proc) {cout \nUsage:\n\t proc local_port\n\n; } int main(int argc,char* argv[]) {if(argc ! 2){Usage(argv[0]);exit(USAGE_ERR);}uint16_t port atoi(argv[1]);unique_ptrTcpServer tcs(new TcpServer(port));tcs-InitServer();tcs-start();return 0; } 3.编写客户端 tcpClient.hpp #pragma once#include iostream #include string #include cstring #include sys/types.h #include sys/socket.h #include netinet/in.h #include arpa/inet.h #include unistd.hnamespace client {using namespace std;class TcpClient{public:TcpClient(const string serverip,const uint16_t port):_serverip(serverip),_port(port),_sock(-1){}void InitClient(){_sock socket(AF_INET,SOCK_STREAM,0);if(_sock 0){cerr create sock fail endl;exit(-1);}}void start(){//建立连接struct sockaddr_in server;server.sin_family AF_INET;server.sin_port htons(_port);server.sin_addr.s_addr inet_addr(_serverip.c_str());if(connect(_sock,(struct sockaddr*)server,sizeof(server)) ! 0){cerr connect fail endl;}else{string message;while(true){cout Please Enter: ;getline(cin,message);write(_sock,message.c_str(),message.size());char buffer[1024];int n read(_sock,buffer,sizeof(buffer)-1);if(n 0){buffer[n] 0;cout Server回复: buffer endl;}else{break;}}}}~TcpClient(){if(_sock 0)close(_sock);}private:string _serverip;uint16_t _port;int _sock;}; } // namespace clienttcpClient.cc:启动客户端 #includetcpClient.hpp #includememory using namespace client; static void Usage(string proc) {cout \nUsage:\n\t proc serverip serverport\n\n; } int main(int argc,char* argv[]) {if(argc ! 3){Usage(argv[0]);exit(-1);}uint16_t port atoi(argv[2]);string ip argv[1];unique_ptrTcpClient tcc(new TcpClient(ip,port));tcc-InitClient();tcc-start();return 0; }4.编译链接 makefile: .PHONY:all all:tcpServer tcpClient tcpServer:tcpServer.ccg -o $ $^ -stdc11 tcpClient:tcpClient.ccg -o $ $^ -stdc11 .PHONY:clean clean:rm tcpServer tcpClient 5.测试 如图所示服务端和客户端可以完成正常的数据通信了。 6.总结 TCP协议和UDP协议在数据通信的实现中除了一些接口使用的不同之外其实并没有太大的不同在之前说的UDP是面向数据报的而TCP是面向字节流的这些特性又是如何体现的呢关于这个问题博主将在后面的文章中会为大家继续进行介绍。不要错过哦
http://wiki.neutronadmin.com/news/338140/

相关文章:

  • 怎么切页面做网站外贸网站做推广
  • 安徽省建设厅网站权重的网站
  • 建设企业网站专业服务开发网站要注意什么
  • 手机壳定制网站制作网站建设思路梳理
  • 如何让网站长尾关键词有排名17一起做网店网站
  • 定制衣服的软件app优化wordpress
  • 中国最权威的网站排名sem和seo是什么职位
  • 网站及邮件系统建设免费代理网址
  • 百度做的网站 后台管理怎么进入成都公司网站设计
  • 网站适配手机cosy wordpress主题
  • 网站开发 职业环境分析网站制作专业的公司哪家好
  • 公司可以做网站网站模式下做淘宝客
  • 网站看不到排版怎么办dede 建设网站
  • 济宁房地产网站建设给别人做网站收多少钱
  • 建设银行甘肃省行网站wordpress表格显示不了
  • cms如何做中英网站网站建设平台选用
  • 建设网站需要设备响应式网页制作软件
  • 网站开发项目流程书宁夏住房和建设厅网站
  • 天津圣辉友联网站建设套模板网站
  • 中国建设银行网站运营模式用手机制作网站
  • 美橙网站备案照片背景Wordpress会员插件出错
  • 黑龙江省住房和城乡建设网站网站上的幻灯片如何做
  • 吐鲁番市建设局网站广州专业展台制作价格
  • 网站做众筹需哪些条件网站册数
  • 网络营销的网站分类有哪些wordpress怎么上传ppt
  • 石家庄住房和城乡建设厅官方网站杨家平网站建设
  • 在职考研哪个网站做的好网站软件app
  • 重庆网上注册公司网站asp自动获取网站快照 网站缩略图
  • 东莞网站推广模板海南景区网站建设方案
  • 财务记账网站建设需要摊销吗什么公司可以做网站等级保护