HTTP サンプル

  API 初期化



  
// *************************************************************
// 
// *************************************************************
	WORD		wVersion;
	WSADATA	wsaData;
	int		err;

//	wVersion = MAKEWORD( 1, 1 );
	wVersion = MAKEWORD( 2, 2 );
	err = WSAStartup( wVersion, &wsaData );
	if ( err != 0 ) {
		return ( false );
	}
	return ( true );
  



  ソケット作成



  
// *************************************************************
// 
// *************************************************************
	SOCKET	curSocket;

	curSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
	if ( curSocket == INVALID_SOCKET ) {
		WSACleanup();
		return false;
	}
  



  サーバ名よりアドレスを取得

  
// *************************************************************
// 
// *************************************************************
	hostent	*hosts;

	hosts = gethostbyname( HostName );
	if ( hosts == NULL ) {
		return ( false );
	}
  



  接続

  
// *************************************************************
// 
// *************************************************************
	SOCKADDR_IN	Sad;

	Sad.sin_family	= AF_INET;
	Sad.sin_port	= htons( 80 );
	Sad.sin_addr	= *((LPIN_ADDR)*(hosts->h_addr_list));

	int ret;

	ret = connect( curSocket, (LPSOCKADDR)&Sad, sizeof( SOCKADDR_IN ) );
	if ( ret == SOCKET_ERROR ) {
		shutdown( curSocket, 2 );
		WSACleanup();
		return WSAGetLastError();
	}
  



  ページの要求

  
// *************************************************************
// 
// *************************************************************
	char szBuff[1024];

	GetDlgItemText( hDlg, IDC_URLNAME, szBuff, 1024-1 );
	wsprintf( szCommand, "GET %s HTTP/1.0\n\n", szBuff );
	ret = send( curSocket, szCommand, lstrlen( szCommand ), 0 );
  



  受信タイムアウト設定

  
// *************************************************************
// 
// *************************************************************
	int timeout = 60000;   // タイムアウト値をミリ秒単位で指定します。

	setsockopt( curSocket, 
		SOL_SOCKET, 
		SO_RCVTIMEO, 
		(char*)&timeout, 
		sizeof(timeout));
  



  受信データをファイル化

  
// *************************************************************
// 
// *************************************************************
	HANDLE	hFile;
	DWORD	wLen;

	hFile = CreateFile( FileName, 
		GENERIC_WRITE, 
		0, 
		NULL, 
		CREATE_ALWAYS,
		FILE_ATTRIBUTE_NORMAL, 
		NULL );
	if ( hFile == INVALID_HANDLE_VALUE ) {
		return false;
	}

	while( 1 ) {

		ret = recv( curSocket, szBuff, sizeof( szBuff )-1, 0 );
		if ( ret < 0 ) {
			CloseHandle( hFile );
			return WSAGetLastError();
		}
		if ( ret == 0 ) {
			break;
		}
		szBuff[ret] = 0x00;
		ret = WriteFile( hFile, szBuff, (DWORD)ret, &wLen , NULL );

	}

	CloseHandle( hFile );
  



  終了処理

  
// *************************************************************
// 
// *************************************************************
	shutdown( curSocket, 2 );
	closesocket( curSocket );

	WSACleanup();
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ