IPv4とは?
-> データ通信規格。IPアドレスを32ビットのデータとして扱う
バイトストリームとは?
-> バイト単位のデジタルデータのひと続き
#include#include // typedefシンボルおよび構造体のコレクションを定義 #include // ソケットに使うためのヘッダファイル socket() #include // インターネット・プロトコル・ファミリーの定義 int main(void){ int rsock, wsock; struct sockaddr_in addr, client; int len; int ret; // 通信をするためのソケット作成 rsock = socket(AF_INET, SOCK_STREAM, 0); // AF_INETはIPv4接続、SOCK_STREAMはバイトストリーム if(rsock < 0){ fprintf(stderr, "Error. Cannot make socket\n"); return -1; } // socket設定 addr.sin_family = AF_INET; // IPv4 addr.sin_port = htons(8080); // 8080ポート addr.sin_addr.s_addr = INADDR_ANY; // アドレス指定なし // binding socket bind(rsock, (struct sockaddr *)&addr, sizeof(addr)); if(ret < 0){ fprintf(stderr, "Error. Cannot bind socket\n"); return -1; } // socketの接続待ち listen(rsock, 5); // accept TCP connection from client len = sizeof(client); wsock = accept(rsock, (struct sockaddr *)&client, &len); // メッセージ送信 write(wsock, "HTTP1.1 200 OK", 14); // TCPセッション終了 close(wsock); close(rsock); return 0; }
$ gcc -o main main.c
main.c: In function ‘main’:
main.c:43:2: warning: implicit declaration of function ‘write’; did you mean ‘fwrite’? [-Wimplicit-function-declaration]
write(wsock, "HTTP1.1 200 OK", 14);
^~~~~
fwrite
main.c:46:2: warning: implicit declaration of function ‘close’; did you mean ‘pclose’? [-Wimplicit-function-declaration]
close(wsock);
^~~~~
pclose
ソケットで通信していることはわかったが、よくわからん。