का उपयोग कर HTTP प्रतिक्रिया में बाइनरी फ़ाइल भेजें मैं http प्रतिक्रिया में एक बाइनरी फ़ाइल (पीएनजी छवि) भेजने की कोशिश कर रहा हूं।सी सॉकेट
FILE *file;
char *buffer;
int fileLen;
//Open file
file = fopen("1.png", "rb");
if (!file)
{
return;
}
//Get file length
fseek(file, 0, SEEK_END);
fileLen=ftell(file);
fseek(file, 0, SEEK_SET);
//Allocate memory
buffer=(char *)malloc(fileLen+1);
if (!buffer)
{
fprintf(stderr, "Memory error!");
fclose(file);
return;
}
//Read file contents into buffer
fread(buffer, fileLen, 1, file);
fclose(file);
//free(buffer);
char header[102400];
sprintf(header,
"HTTP/1.1 200 OK\n"
"Date: Thu, 19 Feb 2009 12:27:04 GMT\n"
"Server: Apache/2.2.3\n"
"Last-Modified: Wed, 18 Jun 2003 16:05:58 GMT\n"
"ETag: \"56d-9989200-1132c580\"\n"
"Content-Type: image/png\n"
"Content-Length: %i\n"
"Accept-Ranges: bytes\n"
"Connection: close\n"
"\n", fileLen);
char *reply = (char*)malloc(strlen(header)+fileLen);
strcpy(reply, header);
strcat(reply, buffer);
printf("msg %s\n", reply);
//return 0;
int sd = socket(PF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
bzero(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(8081);
addr.sin_addr.s_addr = INADDR_ANY;
if(bind(sd,&addr,sizeof(addr))!=0)
{
printf("bind error\n");
}
if (listen(sd, 16)!=0)
{
printf("listen error\n");
}
for(;;)
{
int size = sizeof(addr);
int client = accept(sd, &addr, &size);
if (client > 0)
{
printf("client connected\n");
send(client, reply, strlen(reply), 0);
}
}
लेकिन अपने ब्राउज़र को नहीं समझता यह = (क्या मैं गलत कर रहा हूँ वास्तव में
युपीडी: मैं पाठ डेटा भेजने की कोशिश की - इसके ठीक लेकिन बाइनरी डेटा विफल रहता है
ध्यान दें कि यह वास्तव में आपके द्वारा डाले गए डिबगिंग प्रिंट को ठीक नहीं करेगा, क्योंकि यह printf का उपयोग करता है और जब यह शून्य बाइट हिट करता है तो रुक जाएगा। लेकिन सॉकेट व्यवहार सही होगा; मैंने इसे एक वेब ब्राउज़र में परीक्षण किया और यह काम किया। – mgiuca