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

旅游项目网站开发模仿网站属于侵权吗

旅游项目网站开发,模仿网站属于侵权吗,居然之家装修公司怎么样,wordpress如何设计主页转自#xff1a;http://blog.csdn.net/itcastcpp/article/details/39047265 前面几篇中实现的client每次运行只能从命令行读取一个字符串发给服务器#xff0c;再从服务器收回来#xff0c;现在我们把它改成交互式的#xff0c;不断从终端接受用户输入并和server交互。 [cp… 转自http://blog.csdn.net/itcastcpp/article/details/39047265 前面几篇中实现的client每次运行只能从命令行读取一个字符串发给服务器再从服务器收回来现在我们把它改成交互式的不断从终端接受用户输入并和server交互。 [cpp] view plain copy /* client.c */   #include stdio.h   #include string.h   #include unistd.h   #include netinet/in.h   #include wrap.h       #define MAXLINE 80   #define SERV_PORT 8000       int main(int argc, char *argv[])   {            structsockaddr_in servaddr;            charbuf[MAXLINE];            intsockfd, n;                  sockfd Socket(AF_INET, SOCK_STREAM, 0);                bzero(servaddr,sizeof(servaddr));            servaddr.sin_family AF_INET;            inet_pton(AF_INET,127.0.0.1, servaddr.sin_addr);            servaddr.sin_port htons(SERV_PORT);                  Connect(sockfd,(struct sockaddr *)servaddr, sizeof(servaddr));                while(fgets(buf, MAXLINE, stdin) ! NULL) {                      Write(sockfd,buf, strlen(buf));                      n Read(sockfd, buf, MAXLINE);                      if(n  0)                               printf(theother side has been closed.\n);                      else                               Write(STDOUT_FILENO,buf, n);            }                Close(sockfd);            return0;   }   编译并运行server和client看看是否达到了你预想的结果。 这时server仍在运行但是client的运行结果并不正确。原因是什么呢仔细查看server.c可以发现server对每个请求只处理一次应答后就关闭连接client不能继续使用这个连接发送数据。但是client下次循环时又调用write发数据给serverwrite调用只负责把数据交给TCP发送缓冲区就可以成功返回了所以不会出错而server收到数据后应答一个RST段client收到RST段后无法立刻通知应用层只把这个状态保存在TCP协议层。client下次循环又调用write发数据给server由于TCP协议层已经处于RST状态了因此不会将数据发出而是发一个SIGPIPE信号给应用层SIGPIPE信号的缺省处理动作是终止程序所以看到上面的现象。 为了避免client异常退出上面的代码应该在判断对方关闭了连接后break出循环而不是继续write。另外有时候代码中需要连续多次调用write可能还来不及调用read得知对方已关闭了连接就被SIGPIPE信号终止掉了这就需要在初始化时调用sigaction处理SIGPIPE信号如果SIGPIPE信号没有导致进程异常退出write返回-1并且errno为EPIPE。 另外我们需要修改server使它可以多次处理同一客户端的请求。 [cpp] view plain copy /* server.c */   #include stdio.h   #include string.h   #include netinet/in.h   #include wrap.h       #define MAXLINE 80   #define SERV_PORT 8000       int main(void)   {            structsockaddr_in servaddr, cliaddr;            socklen_tcliaddr_len;            intlistenfd, connfd;            charbuf[MAXLINE];            charstr[INET_ADDRSTRLEN];            inti, n;                listenfd Socket(AF_INET, SOCK_STREAM, 0);                bzero(servaddr,sizeof(servaddr));            servaddr.sin_family AF_INET;            servaddr.sin_addr.s_addr htonl(INADDR_ANY);            servaddr.sin_port htons(SERV_PORT);                  Bind(listenfd,(struct sockaddr *)servaddr, sizeof(servaddr));                Listen(listenfd,20);                printf(Acceptingconnections ...\n);            while(1) {                      cliaddr_len sizeof(cliaddr);                      connfd Accept(listenfd,                                        (structsockaddr *)cliaddr, cliaddr_len);                      while(1) {                               n Read(connfd, buf, MAXLINE);                               if(n  0) {                                        printf(theother side has been closed.\n);                                        break;                               }                               printf(receivedfrom %s at PORT %d\n,                                      inet_ntop(AF_INET,cliaddr.sin_addr, str, sizeof(str)),                                      ntohs(cliaddr.sin_port));                                     for(i  0; i  n; i)                                        buf[i] toupper(buf[i]);                               Write(connfd,buf, n);                      }                      Close(connfd);            }   }   经过上面的修改后客户端和服务器可以进行多次交互了。 前面几篇中实现的client每次运行只能从命令行读取一个字符串发给服务器再从服务器收回来现在我们把它改成交互式的不断从终端接受用户输入并和server交互。 [cpp] view plain copy /* client.c */   #include stdio.h   #include string.h   #include unistd.h   #include netinet/in.h   #include wrap.h       #define MAXLINE 80   #define SERV_PORT 8000       int main(int argc, char *argv[])   {            structsockaddr_in servaddr;            charbuf[MAXLINE];            intsockfd, n;                  sockfd Socket(AF_INET, SOCK_STREAM, 0);                bzero(servaddr,sizeof(servaddr));            servaddr.sin_family AF_INET;            inet_pton(AF_INET,127.0.0.1, servaddr.sin_addr);            servaddr.sin_port htons(SERV_PORT);                  Connect(sockfd,(struct sockaddr *)servaddr, sizeof(servaddr));                while(fgets(buf, MAXLINE, stdin) ! NULL) {                      Write(sockfd,buf, strlen(buf));                      n Read(sockfd, buf, MAXLINE);                      if(n  0)                               printf(theother side has been closed.\n);                      else                               Write(STDOUT_FILENO,buf, n);            }                Close(sockfd);            return0;   }   编译并运行server和client看看是否达到了你预想的结果。 这时server仍在运行但是client的运行结果并不正确。原因是什么呢仔细查看server.c可以发现server对每个请求只处理一次应答后就关闭连接client不能继续使用这个连接发送数据。但是client下次循环时又调用write发数据给serverwrite调用只负责把数据交给TCP发送缓冲区就可以成功返回了所以不会出错而server收到数据后应答一个RST段client收到RST段后无法立刻通知应用层只把这个状态保存在TCP协议层。client下次循环又调用write发数据给server由于TCP协议层已经处于RST状态了因此不会将数据发出而是发一个SIGPIPE信号给应用层SIGPIPE信号的缺省处理动作是终止程序所以看到上面的现象。 为了避免client异常退出上面的代码应该在判断对方关闭了连接后break出循环而不是继续write。另外有时候代码中需要连续多次调用write可能还来不及调用read得知对方已关闭了连接就被SIGPIPE信号终止掉了这就需要在初始化时调用sigaction处理SIGPIPE信号如果SIGPIPE信号没有导致进程异常退出write返回-1并且errno为EPIPE。 另外我们需要修改server使它可以多次处理同一客户端的请求。 [cpp] view plain copy /* server.c */   #include stdio.h   #include string.h   #include netinet/in.h   #include wrap.h       #define MAXLINE 80   #define SERV_PORT 8000       int main(void)   {            structsockaddr_in servaddr, cliaddr;            socklen_tcliaddr_len;            intlistenfd, connfd;            charbuf[MAXLINE];            charstr[INET_ADDRSTRLEN];            inti, n;                listenfd Socket(AF_INET, SOCK_STREAM, 0);                bzero(servaddr,sizeof(servaddr));            servaddr.sin_family AF_INET;            servaddr.sin_addr.s_addr htonl(INADDR_ANY);            servaddr.sin_port htons(SERV_PORT);                  Bind(listenfd,(struct sockaddr *)servaddr, sizeof(servaddr));                Listen(listenfd,20);                printf(Acceptingconnections ...\n);            while(1) {                      cliaddr_len sizeof(cliaddr);                      connfd Accept(listenfd,                                        (structsockaddr *)cliaddr, cliaddr_len);                      while(1) {                               n Read(connfd, buf, MAXLINE);                               if(n  0) {                                        printf(theother side has been closed.\n);                                        break;                               }                               printf(receivedfrom %s at PORT %d\n,                                      inet_ntop(AF_INET,cliaddr.sin_addr, str, sizeof(str)),                                      ntohs(cliaddr.sin_port));                                     for(i  0; i  n; i)                                        buf[i] toupper(buf[i]);                               Write(connfd,buf, n);                      }                      Close(connfd);            }   }   经过上面的修改后客户端和服务器可以进行多次交互了。
http://www.zqtcl.cn/news/281270/

相关文章:

  • 电子商务网站建设财务分析建立网站方法
  • 大专学网站开发wordpress显示数据库请求
  • 诸暨网站制作设计公众号文章怎么导入到wordpress
  • 网站死链怎么办青岛网站制作企业
  • 已经有域名 怎么修改网站网站推广找客户
  • 网站的制作建站人增加网站流量
  • 向国旗致敬做时代新人网站广州网站建设公司排名
  • 阿里云域名怎么做网站对网站进行seo优化
  • 响应式网站建设合同11月将现新冠感染高峰
  • 做网站客户一般会问什么问题百度云网盘资源分享网站
  • 网站设计中超链接怎么做艺术设计
  • 卡盟网站建设wordpress优化代码
  • 做网站需要什么技术员商城型网站开发网站建设
  • discuz做地方门户网站网站大全免费完整版
  • 莆田人做的网站一天赚2000加微信
  • 阿里云网站访问不了怎么办做网站二维码
  • 手机商城网站建设可采用的基本方式有
  • 网站备案管理做广告公司网站建设价格
  • 绵阳专业网站建设公司上海外贸公司排名榜
  • 如何做英文系统下载网站快速排名工具免费
  • 苏州建网站必去苏州聚尚网络网页视频提取在线工具
  • 网站建设服务市场分析百度集团
  • 网站怎么企业备案信息做网站业务员如何跟客户沟通
  • 如何网站推广知名的集团门户网站建设费用
  • 网站入口设计规范专门做喷涂设备的网站
  • 最简单网站开发软件有哪些企业管理培训课程培训机构
  • 桂城网站制作公司wordpress 导航网站
  • 一个公司做网站需要注意什么条件网站备案 登陆
  • 百度网站介绍显示图片装修公司一般多少钱一平方
  • 网站销售如何做业绩我找伟宏篷布我做的事ko家的网站