3
ちょっと私は以下のコードでGoogleからの返信を受け取ろうとしています。 Telnet www.google.com 80 HEAD/HTTP/1.1から受け取るのと同じ種類の返信を受けていますが、それはちょうどぶら下がっています。誰もがここでの問題を見つけることができるなら、私は本当にGREATFULCでソケットサーバーを使用しているHTMLヘッド要求
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
void error(const char *msg)
{
perror(msg);
exit(0);
}
int main(int argc, char *argv[])
{
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
portno = 80;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
error("ERROR opening socket");
}
server = gethostbyname("www.google.com.au");
if (server == NULL)
{
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr,server->h_length);
serv_addr.sin_port = htons(portno);
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
{
error("ERROR connecting");
}
puts("Retreiving HTML Head");
ssize_t nByte = write(sockfd,"HEAD/HTTP/1.1\r\n",strlen("HEAD/HTTP/1.1\r\n"));
if(nByte <= 0)
{
perror("send");
exit(EXIT_FAILURE);
}
size_t recived_len = 0;
if ((recived_len = read(sockfd,buffer,255)) == 0)
{
bzero(buffer,256);
printf("%s", buffer);
}
if (recived_len == -1)
{
perror("read");
}
close(sockfd);
return 0;
}
\ R \ n \ R \ N'(すなわち、CRLFが続く空行) – tkausl
は[HTTP]についてもう少しを読みます( https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol)おそらく仕様([RFC2616](https://tools.ietf.org/html/rfc2616))でも。特にリクエストヘッダが空行でどのように終了するかを調べます。 –
は問題を解決しますが、私はまだread()に何も返されません。HTTPのおかげで、読んでくれます。 –