うぃんそっく | spin on the RITZ

うぃんそっく

とりあえずメモ

ws32.libはリンクすること

ソケット生成の前にWSAStartup関数を呼ぶ。winsockのバージョンについてはまた調べる。とりあえず適当に入れてみた(MAKEWORD(2,0)でもMAKEWORD(1,1)でも動いた)

ソケット生成はsocket関数ではなく、WSASocket関数を呼ぶ。下のリンク参照
http://d.hatena.ne.jp/winebarrel/20080315/p2

コネクションまではとりあえずUNIXと同じかも。

recvとsendは微妙に使いにくいので、fdopenを使う。windowsの場合は_open_osfhandle(sock, O_RDWR|O_BINARY)で新しいデスクリプタをもらってから、fdopen(fd, "rb+");すれば大丈夫そう。とりあえずBCCでは動いた。UNIXの方は機会があったら確認する。
http://msdn.microsoft.com/ja-jp/library/bdts1c9x(VS.80).aspx

さっき作ったFILE*を用いてfprintfでsendの代わりをする。
fprintf(fp, "GET %s HTTP/1.1\r\n", PATH);
fprintf(fp, "Host: %s:80\r\n", HOST);
fprintf(fp, "\r\n");
とりあえず、HTTPでデータ取ることにする。三行目のキャリッジなんとかと改行は超重要!これがないとサーバが返事をしてくれない。ただのしかばねのようになる。

リクエスト送ったらfgetsで取り込む。recvよりも使いやすい。改行で終わるし。

closesocket関数とWSACleanup関数は呼ぶこと。取得したFILE*のfcloseもしておく必要があるかもね。

windowsの場合はUNIXと互換性があるように見えて結構違ってるので、常に注意すること!

とりあえずリンク
http://research.nii.ac.jp/~ichiro/syspro98/connect.html


いっぺんソケットつないだら、つなぎっぱのほうがいいんだろうか。あとで調べよう。っつーか眠いのでねる。