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

本地的丹阳网站建设深圳 网站开发

本地的丹阳网站建设,深圳 网站开发,wordpress插件使用模板,办公室装修公司哪里好套接字 套接字的意义就是客户端与服务器进行双向通信的端点#xff0c;如果有不理解点上面套接字三字更近距离了解套接字。 网络套接字与客户连接的特定网络有关的服务端口号#xff0c;这个端口号允许linux进入特定的端口号的连接转到正确的服务器进程。 套接字通信的建立过…套接字 套接字的意义就是客户端与服务器进行双向通信的端点如果有不理解点上面套接字三字更近距离了解套接字。 网络套接字与客户连接的特定网络有关的服务端口号这个端口号允许linux进入特定的端口号的连接转到正确的服务器进程。 套接字通信的建立过程: 服务器端 1.使用socket创建一个套接字。它是OS分配给服务器进程的类似文件描述符的资源。 2.服务器进程用系统调用bind命名套接字。然后服务器开始等待客户端连接到这个命名套接字。 3.服务器通过系统调用accept来接受客户的连接。accept会创建一个不同于命名套接字的新套接字来与这个特定客户进行通信而命名套接字则被保留下来继续处理其他客户的连接请求。 4.系统获取客户端基本信息,为客户端提供服务。 客户端 1.调用socket创建一个未命名套接字。 2.通过远端主机信息,向服务器发起连接。 实现一个客户端与主机端连接将客户文本进行统一大小写转换。 实现服务器端ServerTcp: 第一步 创建类名字为ServerTcp在类里创建私有变量套接字与端口和IP。 private: //套接字 int listenSock_; //port接口 uint16_t port_; //ip std::string ip_; 第二步创建构造函数与析构函数。 ServerTcp(uint16_t port,const std::string ip):port_(port),ip_(ip),listenSock_(-1){ } ~ServerTcp(){ }第三步 创建套接字socket,并判断是否创建成功listenSock_socket(PF_INET,SOCK_STREAM,0);if(listenSock_0){logMessage(FATAL,socket:%s,strerror(errno));//日志消息打印错误码exit(SOCKET_ERR);//套接字错误}logMessage(DEBUG,socket:%s,%d,strerror(errno),listenSock_); 第四步 进行绑定 4.1填充服务器信息 struct sockaddr_in local;//用户栈memset(local,0,sizeof local);//初始化全部置为0local.sin_familyPF_INET;//绑定域local.sin_porthtons(port_);//将主机字节顺序转为网络字节顺序ip_.empty()?(local.sin_addr.s_addrINADDR_ANY):(inet_aton(ip_.c_str(),local.sin_addr)); 4.2将本地socket信息写入sock_对应的内核区域if(bind(listenSock_,(const struct sockaddr *)local,sizeof local)0){logMessage(FATAL,bind: %s,strerror(errno));exit(BIND_ERR);//绑定错误}logMessage(DEBUG,bind: %s,%d,strerror(errno),listenSock_); 第五步 监听sockettcp是面向连接的if(listen(listenSock_,5)0)//把一个未连接的套接字转换成一个被动套接字{ //指示内核应该接受指向该套接字的连接请求logMessage(FATAL,listen: %s,strerror(errno));exit(LISTEN_ERR);}logMessage(DEBUG,listen:%s,%d,strerror(errno),listenSock_); 第六步 创建loop函数完成对客户的服务 先获取连接,得到客户端基本信息提供你的服务本次服务为小写转为大写服务。 void loop(){while (true){struct sockaddr_in peer;socklen_t lensizeof(peer);//4、获取连接,accept的返回值是一个新的socket fd??int serviceSockaccept(listenSock_,(struct sockaddr *)peer,len);//accept() 告诉它你有空闲的连接。它将返回一个新的套接字文 件描述符这样你就有两个套接字了原来的一个还在侦听你的那个端口 新的在准备发送 (send())//和接收 ( recv()) 数据。这就是这个过程 if(serviceSock0){//获取链接失败logMessage(WARINING,accept: %s[%d],strerror(errno),serviceSock);continue;//继续链接}//4.1获取客户端基本信息uint16_t peerPortntohs(peer.sin_port);//网络字节顺序转主机字节顺序std::string peerIpinet_ntoa(peer.sin_addr);//返回10位的IP地址logMessage(DEBUG,accept: %s | %s[%d], sock fd:%d,strerror(errno),peerIp.c_str(),peerPort,serviceSock);//5 提供服务---echo 小写转大写//5.0多线程版本ThreadData *tdnew ThreadData(peerPort,peerIp,serviceSock,this);//每个客户连接过来换创建独立的空间和ip。实现多进程共享服务pthread_t tid;pthread_create(tid,nullptr,threadRoutine,(void *)td);} }这里面的create对应的方法。方法里面又存放有小写转大写的代码。 class ThreadData { public:uint16_t clientPort_;std::string clientIp_;int sock_;ServerTcp *this_; public:ThreadData(uint16_t port,std::string ip,int sock,ServerTcp *ts):clientPort_(port),clientIp_(ip),sock_(sock),this_(ts){} }; static void *threadRoutine(void *args){pthread_detach(pthread_self());//线程分离自动释放资源ThreadData *tdstatic_castThreadData *(args);//强制类型转换td-this_-transService(td-sock_,td-clientIp_,td-clientPort_);delete td;return nullptr;}//大小写转换服务//TCP UDP :支持全双工void transService(int sock,const std::string clientIp,uint16_t clinentPort){assert(sock0);assert(!clientIp.empty());assert(clinentPort1024);char inbuffer[BUFFER_SIZE];while (true){ssize_t sread(sock,inbuffer,sizeof(inbuffer)-1);if(s0){inbuffer[s]\0;if(strcasecmp(inbuffer,quit)0){logMessage(DEBUG,client quit -- %s[%d],clientIp.c_str(),clinentPort);break;}logMessage(DEBUG,trans before: %s[%d] %s,clientIp.c_str(),clinentPort,inbuffer);//可以进行大小写转化了for(int i0;is;i){if(isalpha(inbuffer[i]) islower(inbuffer[i]))//判断是否是字母检查字符是否是小写inbuffer[i] toupper(inbuffer[i]);}logMessage(DEBUG,trans after: %s[%d] %s,clientIp.c_str(),clinentPort,inbuffer);write(sock,inbuffer,strlen(inbuffer));}else if(s0){//s0表示对方关闭client退出logMessage(DEBUG,client quit -- %s[%d],clientIp.c_str(),clinentPort);break;} else{logMessage(DEBUG,%s[%d] --read: %s,clientIp.c_str(),clinentPort,strerror(errno));break;}}//client退出服务到此结束close(sock);logMessage(DEBUG,server close %d done,sock);} static void Usage(std::string proc) {std::cerrUsage:\n\tproc Port ipstd::endl;std::cerrExample:\n\tproc 127.0.0.1 8080\nstd::endl; }//实现的时候创建ServerTcp调用init和loop服务器端书写完毕。 实现客户端clientTcp volatile bool quitfalse;//客户端口 //当输入prog para_1有一个参数则由操作系统传来的参数为 // argc2表示除了程序名外还有一个参数。 // argv[0]指向输入的程序路径及名称。 // argv[1]指向参数para_1字符串。// 当输入prog para_1 para_2 有2个参数则由操作系统传来的参数为 // argc3表示除了程序名外还有2个参数。 // argv[0]指向输入的程序路径及名称。 // argv[1]指向参数para_1字符串。 // argv[2]指向参数para_2字符串。static void Usage(std::string proc) {std::cerrUsage:\n\tproc serverIp serverPortstd::endl;std::cerrExample:\n\tproc 127.0.0.1 8080\nstd::endl; }int main(int argc,char *argv[]) {if(argc!3){Usage(argv[0]);exit(USAGE_ERR);}std::string serverIpargv[1];uint16_t serverPortatoi(argv[2]); //1、创建套接字int socksocket(AF_INET,SOCK_STREAM,0);if(sock0){std::cerrsocket: strerror(errno)std::endl;exit(SOCKET_ERR);//如果出错退出数据} //2、向服务器发起链接 //2.1发起前的准备工作就是连接远端主机的基本信息struct sockaddr_in server;//在客户机中我们首先创建了一个SCTP套接字//然后创建了一个sockaddr结构其中包含了将要连接的端点。memset(server,0,sizeof(server));//空间初始化为0server.sin_familyAF_INET;//域(定义哪种地址族)说白了就是IP协议server.sin_porthtons(serverPort);//端口号(主机字节顺序转换成网络字节顺序)//就是返回IP对应的网络字节序表示的无符号整数.//网络字节序n转化为点分十进制的IP,例如服务器IP地址inet_aton(serverIp.c_str(),server.sin_addr);//将主机地址转化为二进制数存储在INP结构中 //2.2发起请求connect会自动帮我们进行bind//建立网络连接必须使用connectif(connect(sock,(const struct sockaddr *)server,sizeof(server))!0){std::cerrconnect: strerror(errno)std::endl;exit(CONN_ERR);//通讯失败(连接服务器失败)}std::coutinfo : connect success: sockstd::endl;std::string message;while (!quit){message.clear();//清理std::cout请输入你的消息;std::getline(std::cin,message);if(strcasecmp(message.c_str(),quit)0)//将字符全部转换成小写{quittrue;}ssize_t swrite(sock,message.c_str(),message.size());//写入sockif(s0){message.resize(1024);ssize_t sread(sock,(char *)(message.c_str()),1024);if(s0){message[s]0;}std::coutServer Echo messagestd::endl;}else if(s 0){break;}}close(sock);return 0; }
http://www.dnsts.com.cn/news/38800.html

相关文章:

  • 平面设计教程网站有哪些群辉搭wordpress
  • 廊坊做网站霸州网站优化
  • 网站建设维护php公司网站 域名 cn com
  • 网站内容段落之间有空格对seo有影响吗房屋装修效果图三室一厅
  • 白城学习做网站的学校专业的网站建设哪家快
  • 社交投票论坛网站开发淄博微网站
  • 网站建设的公司有哪些做班级的活动的网站
  • 学校网站建设要点网片焊接
  • 营销型企业网站建设的内容网站反向代理怎么做
  • 策划方案万能模板北京网站优化方法
  • 企业网站博客上如何推广网站优化策划书
  • 外链提高网站权重邯郸网络信息工程教育
  • 自适应网站导航怎么做商城网站建设怎么样
  • 用dz程序做的电影网站对网站建设在电子商务中的看法
  • 做英语题的网站做美食网站的背景
  • 企业速成网站wordpress移除谷歌字体
  • 四平网站建设有哪些wordpress 外教 缩略图
  • 个人网站模板代码门户型网站都有哪些
  • 简洁 手机 导航网站模板下载安装厦门网站建设优化企业
  • html5 单页 响应式 网站模板微信小程序视频网站开发教程
  • 汕头有没有做网站做好网站外链建设的最新方法
  • 建立网站的意义网站建设实践论文
  • 广东网站开发哪家强广东省农业农村厅官网查询
  • 网站建设费能算作无形资产吗购物网站首页图片
  • 网站开发 技术路线新闻软文发布平台
  • 企业网站建设 价格南京广告公司地址
  • 网站搜索框代码怎么做自适应网站什么做
  • 网站建设 核算做淘宝链接模板网站
  • 发泡机 东莞网站建设俄语网站建设
  • 中山本地网站建设如何注册网络公司