显示一个带有三张图片的网页,要向服务器发送几次请求?

场景:在浏览器地址栏输入url,浏览器显示网页内容

如果网页中包括图片,会在网页中相应的位置嵌入表示图片文件的标签的控制信息

浏览器在显示文字时会搜搜相应的标签,当遇到图片相关的标签时,在屏幕上留出显示图片的空间,然后再次访问服务器,按照标签中指定的文件名向Web服务器请求获取相应的图片,并且将它显示在预留的空间中

每次请求只能获取1个文件所以如果一个网页中包含3张图片,获取网页文字+3张图片,总共要向服务器发送4条请求

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会根据你的要求进行回答,下面是一个简单的客户端和服务器端程序,用C语言编写,带有注释,希望能帮到你。 服务器端程序: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #define MAXPENDING 5 // 最大连接队列 void DieWithError(char *errorMessage); // 错误处理函数 int main(int argc, char *argv[]) { int servSock; // 服务器套接字描述符 int clntSock; // 客户端套接字描述符 struct sockaddr_in servAddr; // 本地地址 struct sockaddr_in clntAddr; // 客户端地址 unsigned short servPort; // 服务器端口号 unsigned int clntLen; // 客户端地址长度 if (argc != 2) { // 命令行参数错误 fprintf(stderr, "Usage: %s <Server Port>\n", argv[0]); exit(1); } servPort = atoi(argv[1]); // 将字符串转换为整数 // 创建套接字 if ((servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) DieWithError("socket() failed"); // 构造本地地址结构体 memset(&servAddr, 0, sizeof(servAddr)); // 清空结构体 servAddr.sin_family = AF_INET; // IPv4地址族 servAddr.sin_addr.s_addr = htonl(INADDR_ANY); // 任意本地地址 servAddr.sin_port = htons(servPort); // 服务器端口号 // 绑定套接字和本地地址 if (bind(servSock, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0) DieWithError("bind() failed"); // 监听套接字 if (listen(servSock, MAXPENDING) < 0) DieWithError("listen() failed"); // 循环等待客户端连接 for (;;) { // 接受客户端连接请求 clntLen = sizeof(clntAddr); if ((clntSock = accept(servSock, (struct sockaddr *) &clntAddr, &clntLen)) < 0) DieWithError("accept() failed"); // 处理客户端请求 // 在此处添加代码,实现服务器端向客户端发送一个文档 close(clntSock); // 关闭客户端套接字 } return 0; } void DieWithError(char *errorMessage) { perror(errorMessage); exit(1); } ``` 客户端程序: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> void DieWithError(char *errorMessage); // 错误处理函数 int main(int argc, char *argv[]) { int sock; // 客户端套接字描述符 struct sockaddr_in servAddr; // 服务器地址 unsigned short servPort; // 服务器端口号 char *servIP; // 服务器IP地址 char *request; // 请求消息 char buffer[BUFSIZ]; // 缓冲区 unsigned int requestLen; // 请求消息长度 int bytesRcvd, totalBytesRcvd; // 已经接收的字节数 if (argc != 4) { // 命令行参数错误 fprintf(stderr, "Usage: %s <Server IP> <Server Port> <Request Message>\n", argv[0]); exit(1); } servIP = argv[1]; servPort = atoi(argv[2]); request = argv[3]; requestLen = strlen(request); // 创建套接字 if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) DieWithError("socket() failed"); // 构造服务器地址结构体 memset(&servAddr, 0, sizeof(servAddr)); // 清空结构体 servAddr.sin_family = AF_INET; // IPv4地址族 servAddr.sin_addr.s_addr = inet_addr(servIP); // 服务器IP地址 servAddr.sin_port = htons(servPort); // 服务器端口号 // 连接服务器 if (connect(sock, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0) DieWithError("connect() failed"); // 发送请求消息 if (send(sock, request, requestLen, 0) != requestLen) DieWithError("send() sent a different number of bytes than expected"); // 接收响应消息 totalBytesRcvd = 0; printf("Received: "); // 打印接收到的消息 while (totalBytesRcvd < requestLen) { // 接收数据 if ((bytesRcvd = recv(sock, buffer, BUFSIZ - 1, 0)) <= 0) DieWithError("recv() failed or connection closed prematurely"); totalBytesRcvd += bytesRcvd; buffer[bytesRcvd] = '\0'; // 添加字符串结束标志 printf("%s", buffer); // 打印接收到的消息 } printf("\n"); // 换行 close(sock); // 关闭套接字 return 0; } void DieWithError(char *errorMessage) { perror(errorMessage); exit(1); } ``` 上述程序中的服务器端程序只是一个基本的框架,还需要在其中添加代码,实现服务器端向客户端发送一个文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值