FC2ブログ
--.--
--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

05.08
Tue
HTTPのヘッダ部分を受信したりー.いろいろてきとうに書いてみた


#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>

#define True 1
#define False 0

/*

	int GetDataExactly
		(
			int ソケットのファイルディスクリプタ , char *データを格納するための文字型配列 ,
			int 受信するサイズ
		)
		
	return 0 正常にsize分受信した
	return 0以外の時 途中まで受信したデータのサイズ.途中で接続が切れた

	*補足*
	指定されたsize分正確に受信しptrに書き込むと思います

*/
int GetDataExactly(int socketID , char *ptr ,  int size)
{
	int allrecvedsize = 0;
	int justrecvedsize = 0;
	while (True){
		
		justrecvedsize = recv(socketID , ptr + allrecvedsize , size - allrecvedsize , 0);
		allrecvedsize += justrecvedsize;
		
		if (allrecvedsize == size){
				return 0;
		}

		if (justrecvedsize == 0){
			
			if (allrecvedsize == size){
				return 0;
			}else{
				return allrecvedsize;
			}
		}
	}
}

/*	

	int GetHTTPHeader
		(
			int ソケットファイルディスクリプタ , char *データを格納する文字型配列 ,
			int 文字型配列の長さ , int 最大何行取得するか
		)
	
	return 0 http形式のヘッダーを正確に取得できた
	return 1 受信の途中で接続が切れた
	return 2 ヘッダの最大受信行数に達した
	return 3 初期化された文字配列の長さを超えそうになった

	*補足*
	HTTPヘッダ形式(\r\nで区切られた)のヘッダを受信しptrに書き込みます

*/
int GetHTTPHeader(int socketID  , char *ptr , int ptrsize , int maxline){
	
	int flag = 0;
	int line = 0;
	int justrecvedsize = 0;
	int ptraxcel = 0;

	for(ptraxcel = 0;ptraxcel<ptrsize;ptraxcel++){
		
		justrecvedsize = recv(socketID , ptr+ptraxcel , 1 , 0);
		
		if (justrecvedsize == 0)
				return 1;
		if ((*(ptr+ptraxcel) == '\r') || (*(ptr+ptraxcel) == '\n') ){
				flag += 1;
				if (flag == 4){ 
					return 0;
				}else if(flag == 2){
					line += 1;
				}
				if (line == maxline)
						return 2;
		}else{
			flag = 0;
		}
		
	}
	return 3;
}
スポンサーサイト

comment 0 trackback 0
トラックバックURL
http://telracsmoratori.blog.fc2.com/tb.php/112-7782cb7a
トラックバック
コメント
管理者にだけ表示を許可する
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。