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

最高人民法院公告网江苏网站seo

最高人民法院公告网,江苏网站seo,买空间服务器做网站怎么弄,网站建设 慕课目录 1--基于TCP的半关闭 1-1--TCP单方面完全断开的问题 1-2--shutdown()函数 1-3--半关闭的必要性 2--基于半关闭的文件传输程序 1--基于TCP的半关闭 1-1--TCP单方面完全断开的问题 Linux 系统中的 close 函数会将 TCP Socket 的连接完全断开,这意味着不能收…

目录

1--基于TCP的半关闭

1-1--TCP单方面完全断开的问题

1-2--shutdown()函数

1-3--半关闭的必要性

2--基于半关闭的文件传输程序


1--基于TCP的半关闭

1-1--TCP单方面完全断开的问题

        Linux 系统中的 close 函数会将 TCP Socket 的连接完全断开,这意味着不能收发数据(关闭了输入流和输出流),这可能会导致主机 A 无法收到主机 B 的数据(主机A的输入流被关闭了); 

1-2--shutdown()函数

#include <sys/socket.h>
int shutdown(int sock, int howto);
// 成功时返回 0, 失败时返回 -1
// sock 表示需要断开的 Socket 的文件描述符
// howto 表示传递断开的方式信息

        shutdown() 函数可以避免上面完全关闭导致数据丢失的问题,其通过指定断开的方式来选择性地断开输入流、输出流

        断开的方式通过第二个参数来指定,其中 SHUT_RD 表示断开输入流SHUT_WR 表示断开输出流SHUT_RDWR 表示同时断开 I/O 流

1-3--半关闭的必要性

        对于服务器端/客户端的数据传输问题,传输文件的服务器端只需连续传输文件数据即可,但客户端无法知道何时结束数据的接收;

        为了解决上述问题,服务器端应向客户端传递一个 EOF 表示文件传输结束,而客户端通过接收到 EOF 知晓文件传递结束,可以停止接收数据

        断开输出流可以向外传递 EOF(无论是设置 SHUT_WR 还是直接使用 close() 函数);

2--基于半关闭的文件传输程序

服务器端:

// gcc file_server.c -o file_server
// ./file_server 9190#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>#define BUF_SIZE 30void error_handling(char *message){fputs(message, stderr);fputc('\n', stderr);exit(1);
}int main(int argc, char *argv[]){int serv_sd, clnt_sd;FILE* fp;char buf[BUF_SIZE];int read_cnt;struct sockaddr_in serv_adr, clnt_adr;socklen_t clnt_adr_sz;if(argc != 2){printf("Usage : %s <port>\n", argv[0]);exit(1);}fp = fopen("file_server.c", "rb");serv_sd = socket(PF_INET, SOCK_STREAM, 0);memset(&serv_adr, 0, sizeof(serv_adr));serv_adr.sin_family = AF_INET;serv_adr.sin_addr.s_addr = htonl(INADDR_ANY);serv_adr.sin_port = htons(atoi(argv[1]));bind(serv_sd, (struct sockaddr*)&serv_adr, sizeof(serv_adr));listen(serv_sd, 5);clnt_adr_sz = sizeof(clnt_adr);clnt_sd = accept(serv_sd, (struct sockaddr*)&clnt_adr, &clnt_adr_sz);while(1){read_cnt = fread((void*)buf, 1, BUF_SIZE, fp);if(read_cnt < BUF_SIZE){write(clnt_sd, buf, read_cnt);break;}write(clnt_sd, buf, BUF_SIZE);}shutdown(clnt_sd, SHUT_WR);read(clnt_sd, buf, BUF_SIZE);printf("Message from client: %s \n", buf);fclose(fp);close(clnt_sd);close(serv_sd);return 0;}

客户端:

// gcc file_client.c -o file_client
// ./file_client 127.0.0.1 9190#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>#define BUF_SIZE 30void error_handling(char *message){fputs(message, stderr);fputc('\n', stderr);exit(1);
}int main(int argc, char *argv[]){int sd;FILE* fp;char buf[BUF_SIZE];int read_cnt;struct sockaddr_in serv_adr;if(argc != 3){printf("Usage : %s <IP> <port>\n", argv[0]);exit(1);}fp = fopen("receive.dat", "wb");sd = socket(PF_INET, SOCK_STREAM, 0);memset(&serv_adr, 0, sizeof(serv_adr));serv_adr.sin_family = AF_INET;serv_adr.sin_addr.s_addr = inet_addr(argv[1]);serv_adr.sin_port = htons(atoi(argv[2]));connect(sd, (struct sockaddr*)&serv_adr, sizeof(serv_adr));while((read_cnt = read(sd, buf, BUF_SIZE)) != 0){fwrite((void*)buf, 1, read_cnt, fp);}puts("Received file data");write(sd, "Thank you", 10);fclose(fp);close(sd);return 0;
}

运行结果:

http://www.tj-hxxt.cn/news/118255.html

相关文章:

  • 如何学建设网站百度收录需要多久
  • 成都网络优化网站建设企业推广策略
  • 青岛企业网站建设网站seo优化发布高质量外链
  • wordpress视频站模板sem优化怎么做
  • 网站开发技术服务合同范本一键注册所有网站
  • 国家税务总局网上办税服务厅登录南京seo公司排名
  • 做网站找我图片微信如何引流推广精准加人
  • 大连建站平台新闻最近新闻10条
  • 商城网站建设实训报告模板百度站长工具怎么关闭
  • 南京网站建设 seo淘宝怎么优化关键词步骤
  • 企业营销型网站策划书百度推广销售员的工作内容
  • 网站可以叫做系统吗广东省广州市白云区
  • 云虚拟主机做二个网站网站移动端优化工具
  • 黄埔营销型网站建设网站关键词快速优化
  • 做网站 用什么兼容app推广方式有哪些
  • 网站控制百度搜索结果优化
  • 网站首页源码推广软文营销案例
  • 如何增加网站索引量免费的网站关键词查询工具
  • 用mvc做网站的缺点电商推广联盟
  • 企业网站建设兴田德润电话长沙关键词优化公司电话
  • 株洲网站建设优化企业如何自建网站?
  • wordpress和ecshop区别百度关键词优化公司
  • 重庆新闻发布会最新自己怎么做关键词优化
  • 福州做网站公司免费域名解析
  • wordpress 上传 阿里云站长之家seo
  • 要想用谷歌访问外国网站怎么做建设网站需要多少钱
  • 帝国cms做企业网站seo推广编辑
  • 有哪些官网做的比较好的网站免费推广方法有哪些
  • web网页设计与开发论文天津seo诊断技术
  • 学校网站报价方案十大销售管理软件排行榜