日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux c post上传文件,Linux C语言Http POST上传图片

發布時間:2023/12/31 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux c post上传文件,Linux C语言Http POST上传图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近需要在嵌入式設備寫個POST圖片的功能,但是找了很久都沒有現成的代碼,curl放入嵌入式設備又太臃腫,現在分享一下代碼

#include

#include

#include

#include

#include

#include

#include

unsigned long get_file_size(const char *path)

{

unsigned long filesize = -1;

struct stat statbuff;

if(stat(path, &statbuff) < 0){

return filesize;

}else{

filesize = statbuff.st_size;

}

return filesize;

}

int main()

{

int cfd;

int recbytes;

int sin_size;

char buffer[1024]={0};

struct sockaddr_in s_add,c_add;

unsigned short portnum=80;

printf("Hello,welcome to client !\r\n");

cfd = socket(AF_INET, SOCK_STREAM, 0);

if(-1 == cfd)

{

printf("socket fail ! \r\n");

return -1;

}

printf("socket ok !\r\n");

bzero(&s_add,sizeof(struct sockaddr_in));

s_add.sin_family=AF_INET;

s_add.sin_addr.s_addr= inet_addr("127.0.0.1");

s_add.sin_port=htons(portnum);

printf("s_addr = %#x ,port : %#x\r\n",s_add.sin_addr.s_addr,s_add.sin_port);

if(-1 == connect(cfd,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))

{

printf("connect fail !\r\n");

return -1;

}

printf("connect ok !\r\n");

unsigned long filesize = get_file_size("snap.jpg");

char header[1024];

sprintf(header, "POST /postpic.php HTTP/1.1\r\nContent-Type: application/octet-stream\r\nUser-Agent: cctv.mtv\r\nHost: 127.0.0.1\r\nContent-Length: %ld\r\nCache-Control: no-cache\r\n\r\n", filesize);

printf("%s\r\n", header);

unsigned long totalsize = strlen(header) + filesize;

char* request = (char*)malloc(totalsize);

if (request == NULL){

printf("malloc request fail !\r\n");

return -1;

}

request[0] = '\0';

strcat(request, header);

FILE* fp = fopen("snap.jpg", "rb+");

if (fp == NULL){

printf("open file fail!\r\n");

return -1;

}

int readbyte = fread(request+strlen(request), 1, filesize, fp);

printf("fread return: %d\n", readbyte);

if(-1 == write(cfd,request,totalsize))

{

printf("write fail!\r\n");

return -1;

}

printf("write ok!\r\n");

if(-1 == (recbytes = read(cfd,buffer,1024)))

{

printf("read data fail !\r\n");

return -1;

}

printf("read ok\r\nREC:\r\n");

buffer[recbytes]='\0';

printf("%s\r\n",buffer);

free(request);

fclose(fp);

close(cfd);

return 0;

}

總結

以上是生活随笔為你收集整理的linux c post上传文件,Linux C语言Http POST上传图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。