#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
//1.创建网络通信对象
int tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
if(tcp_socket < 0)
{
perror("");
return -1;
}
else
{printf("tcp_socket creat ok\n");
}
//2.连接服务器
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
addr.sin_addr.s_addr = inet_addr("192.168.94.4"); //设置服务器的 IP地址信息
int ret=connect(tcp_socket,(struct sockaddr *)&addr,sizeof(addr));
if(ret == 0)
{
printf("连接成功\n");
}
else
{
perror("");
return -1;
}
//制定 :HTTP 协议 http://192.168.94.4/pic/1.bmp
char *http = "GET /pic/1.bmp HTTP/1.1\r\nHost:192.168.94.4\r\n\r\n";
//发送要求给服务器
ret=write(tcp_socket,http,strlen(http));
printf("ret=%d\n",ret);
//读取服务器返回的内容
int fd=open("1.bmp",O_RDWR|O_CREAT|O_TRUNC,0777);
if(fd < 0)
{
perror("");
return -1;
}
//读取去头后的数据
char buf[4096]={0};
int size=read(tcp_socket,buf,4096);
//1.查找头数据的结束符
char *p = strstr(buf,"\r\n\r\n");
int head_len=0;
if( p != NULL)
{
printf("找到头数据的结束符\n");
head_len=(int )((p+4)-buf);
printf("头字段的长度 %d\n",head_len);
}
//写入去除头字段后的文件内容
write(fd,p+4,size-head_len);
while(1)
{
bzero(buf,4096);
size=read(tcp_socket,buf,4096);
if(size <= 0)
{
close(fd);
close(tcp_socket);
break;
}
printf("size=%d\n",size);
write(fd,buf,size);
}
}
通过http下载自己服务器的图片(与前一个http服务器搭建相对应)
最新推荐文章于 2022-10-24 20:01:39 发布