WinSockについていろいろ漁ってみたところ非常に難解で、
DXライブラリに通信関連の関数群があったことを思い出し、
利用させて頂こうと思っています。
具体的には鯖にHTTPのGETコマンドを投げて、
帰ってくる文字列をガリガリ解析したいです。
ところが、ConnectNetWorkは正の値を返すものの、
GetNetWorkDataLengthが負の値になってしまいます。
過去ログも漁り、SetUseDXNetWorkProtocol(false);が必要だとは突き止めたのですが・・・。
何かがマズイのか、そもそもDXライブラリの通信機能はこういった使い方はできないのか
お教えいただけると助かります。
以下ソース
#include "DxLib.h"
#include <string.h>
int main()
{
char StrBuf[256];
char HttpCmd[128];
//char *HostName="api.worldoftanks.asia";
//char *URL="wot/account/list/?application_id=demo";
//エイチティーティーピー://api.worldoftanks.asia/wot/account/list/?application_id=demo
//↑こちらが本命のアドレスになります。うまくいけばHTTPヘッダと共にJSON文字列が帰ってくるはず・・・。
char *HostName="homepage2.nifty.com";
char *URL="/natupaji/DxLib/dxfunc.html";
//↑やYahooのトップページもなにも反応してくれませんでした(涙
IPDATA Ip;
int NetHandle;
int DataLength;
ChangeWindowMode(true);
if(DxLib_Init()==-1)return -1;
SetUseDXNetWorkProtocol(false);
GetHostIPbyName(HostName,&Ip);
printf("Ip:%d.%d.%d.%d\n",Ip.d1,Ip.d2,Ip.d3,Ip.d4);
NetHandle=ConnectNetWork(Ip,80);//HTTPだからポートは80番でいいんですよね?
printf("NetHandle:%d\n",NetHandle);
if(NetHandle!=-1)
{
sprintf(HttpCmd,"GET %s HTTP/1.0\nHost: %s\n\n",URL,HostName);
printf("HttpCmd:%s\n",HttpCmd);
NetWorkSend(NetHandle,HttpCmd,strlen(HttpCmd));
while(!ProcessMessage())
{
DataLength=GetNetWorkDataLength(NetHandle);
if(DataLength!=0)break;
}
NetWorkRecv(NetHandle,StrBuf,DataLength);
printf("StrBuf:%s",StrBuf);
CloseNetWork(NetHandle);
}
DxLib_End();
return 0;
}
余談ですが、何がしたいのかというと、Noobmeterを自作したいんです。