C
1 unsigned char buffer[4096]; 2 const unsigned char *buf = "HEAD / HTTP/1.0\r\n\r\n"; 3 4 if(sockfd = socket(PF_INET, SOCK_STREAM, 0) == -1) 5 printf("Error! to make socket\n"); 6 addr.sin_family = AF_INET; 7 addr.sin_port = htons(80); 8 addr.sin_addr = *((struct in_addr *)host_info -> h_addr); 9 memset(&(addr.sin_zero), '\0', 8); 10 11 connect(sockfd, (struct sockaddr *)&addr, sizeof(struct sockaddr)); 12 13 int lone = write(sockfd, buf, strlen(buf)); 14 printf("sent letters %d Bytes\n", lone); 15 16 if(lone != -1){ 17 while(read(sockfd, buffer, 1024)){ 18 if(strcmp(buffer, "Server:") == 0){ 19 printf("%s was resieved from %s\n", buffer, argv[1]); 20 exit(0); 21 } 22 } 23 } 24 else 25 printf("failed to send letters\n");
プログラムは少し省略しています。
文字列の送信は出来るのですが、受信が出来ません。
telnet www.internic.net 80
HEAD / HTTP/1.0
Server: Apache ← この子だけを取得したいです!!
send関数を使用すると送信も失敗します。
send関数は使わない方がよいのでしょうか??
分かる方教えてください。
[追記]
strcmp()の方は以下のように新たな関数を作成したら、できました。
C
1int recv_line(int sockfd, unsigned char *dest_buffer) { 2#define EOL "\r\n" 3#define EOL_SIZE 2 4 unsigned char *ptr; 5 int eol_matched = 0; 6 7 ptr = dest_buffer; 8 while(recv(sockfd, ptr, 1, 0) == 1) { // 1バイトを読み込む。 9 if(*ptr == EOL[eol_matched]) { 10 eol_matched++; 11 if(eol_matched == EOL_SIZE) { 12 *(ptr+1-EOL_SIZE) = '\0'; 13 return strlen(dest_buffer); 14 } 15 } else { 16 eol_matched = 0; 17 } 18 ptr++; 19 } 20 return 0; 21}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/27 05:19
2017/01/27 05:26