왜 각 HTTP 헤더 이름 앞에 공백을 넣고 있습니까? 그들은 거기에 속하지 않습니다.
더 중요한 것은 헤더와 HTML 사이에 \r\n
이 필요하다는 것입니다. HTTP 헤더는 \r\n
쌍으로 HTTP 본문과 구분되지만 만 전송합니다.
또한 Content-Length
헤더에 HTML의 유효한 바이트 수가 채워지지 않습니다. 문자 그대로 %ld
을 브라우저에 보내고 있습니다.
더이 대신 같은 것을보십시오 : 또는
const char *fmt = "HTTP/1.1 200 OK\r\n"
"Content-length: %ld\r\n"
"Content-Type: text/html\r\n"
"\r\n"
"%s";
const char *data = "<html><body><h1>Hello world</h1></body></html>";
int datasize = strlen(data);
char m[1024];
sprintf(m, fmt, datasize, data);
send(client_sock, m, strlen(m), 0);
: 또는
int sendStr(int sock, const char *s)
{
return send(sock, s, strlen(s), 0);
}
...
const char *data = "<html><body><h1>Hello world</h1></body></html>";
int datasize = strlen(data);
char clbuf[32];
sprintf(clbuf, "Content-length: %ld\r\n", datasize);
sendStr(client_sock, "HTTP/1.1 200 OK\r\n");
sendStr(client_sock, clbuf);
sendStr(client_sock, "Content-Type: text/html\r\n");
sendStr(client_sock, "\r\n");
send(client_sock, data, datasize, 0);
: 모든 도움
int sendStr(int sock, const char *s)
{
return send(sock, s, strlen(s), 0);
}
int sendStrFmt(int sock, const char *fmt, ...)
{
int result;
va_list args;
va_start(args, fmt);
int size = vsnprintf(NULL, 0, fmt, args);
if (size > 0) {
char *buf = malloc(size+1);
if (buf) {
vsnprintf(buf, size+1, fmt, args);
result = send(sock, buf, size, 0);
free(buf);
} else {
result = -1;
}
}
else if (size == 0) {
result = 0;
}
else {
result = -1;
}
va_end(args);
return result;
}
...
const char *data = "<html><body><h1>Hello world</h1></body></html>";
int datasize = strlen(data);
sendStr(client_sock, "HTTP/1.1 200 OK\r\n");
sendStrFmt(client_sock, "Content-length: %ld\r\n", datasize);
sendStr(client_sock, "Content-Type: text/html\r\n");
sendStr(client_sock, "\r\n");
send(client_sock, data, datasize, 0);
감사 톤! 그것은 효과가있다. 나는 이제 각 HTTP 헤더 이름 앞의 공백을 인식하지 못했으며, 지금 배운 교훈을 알지 못했다. – Dee
나는 의심이 하나 더있다. 내가 TCP 서버에서 양식을 전달하고 브라우저에서 볼 수있는 데이터를 '클라이언트 _ 메시지'[char client_message [2000];] 변수를 수신하는 데이터를 내 TCP 서버에 전달 가져옵니다 제출 단추를 클릭합니다. char 데이터 형식 : – Dee
POST/HTTP/1.1 호스트 : IP : Portno 사용자 에이전트 : Mozilla/5.0 (X11, Linux x86_64, rv : 45.0) Gecko/20100101 Firefox/45.0 수락 : text/html, application/ 수락 언어 : ko-ko, ko, ko, ko, ko, ko, ko, PORTNO/ 연결 : 연결 유지 콘텐츠 유형 : application/x-www-form-urlencoded 콘텐츠 길이 : 59 na me = Adam & age = 40 & addr = 아니요.+10 & Location = 방갈로르 & 성별 = 남성 – Dee