トップページ > 記事閲覧
HTTP通信
名前:WISTERIA 日時: 2015/02/12 10:45

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を自作したいんです。
メンテ

Page: 1 |

Re: HTTP通信 ( No.1 )
名前:WISTERIA 日時:2015/02/14 08:19

お騒がせしました。 投稿後やはりWinSockをがんばってみた結果、 目的のJSON文字列を受け取ることに成功しました! という訳で、まあ問題そのものは自己解決してしまいました(^^ゞ まあこれだけたくさんの人に使われているライブラリよりも私の ソースを疑うべきなのは百も承知ですが、万に一つDXライブラリの 通信機能に何らかのバグがあり、その結果HTTP通信に支障が出ている 可能性がゼロではないと思うので、もしそうであるならば そのバグの発見のきっかけとなればと思い、報告ということに させていただきます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存