プラグイン集

無料ブログはココログ
2021年11月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

サンプルJS

  • ユーロバカ一代の締切
    ・・・初期化中・・・

« CentOS6.4でLine入力の音が出ない | トップページ | Project YNP夏の新作発表 »

2013年7月18日 (木)

Unixネットワークプログラミング入門

UNIXネットワークプログラミング入門、雪田 修一、技術評論社 (2003/6/5)、サポートページ

ずっと前の買った、中古本3冊目(最後)。やっと読み(写し)終わった。

レーシング(6章)の辺りでだんだん結論が分かってきた。
ソケット通信やたらと面倒なファイル、しかも、データ提供する側とデータもらう側で手続きが異なりなおさら面倒なファイル。事前手続きがつつがなく終われば、後は、とても遠くにあるファイル感覚でやり取りできる。
ファイルの開閉が大事なのではなく、書く中身・データ構造の設計とレイテンシをどうするかが問題だと。

チャットサーバーにレーシング、期待して買ったが結論出ちゃってコネクション貼った後はどうしたいかその動かしかたの設計に肝がある。それ分かった瞬間に前回のVBより面白くなくなってしまった。ちなみに、チャットとしての作りこみはVBの方が上。当然だね.NetがCで面倒な1つ1つのお膳立てを引き受けてくれて、VBプログラマはデータ構造と処理内容(広い意味でのアルゴリズムと言えるか?)に専念できる。その分、利用者にやさしいUI作りに時間をふれる。プロトコルの取り扱いはCの方が便利だし低レベルな分操作が可能、VBは面倒な変換がいるから難しいところ。

この本は大学のテキスト目的に作られたものだから、課題が充実している。(やったら、力はつくけど、際限ないと思う。)ゲーム作り目的で買った人にとっては、ソースコードが骨抜きで面白もがかけると思う。

ちなみに、本はRedHat Linux7~9・gcc 3.2を対象にしている。RedHatがタダで使えた時代のですよ。ちなみに自分の環境はCentOS6.4・gcc 4.4.7。構造体の定義がちょくちょく違うから、警告が出る。

気になる点はsocketを呼ぶときに第3引数に0を渡すこと、TCP/IPソケットプログラミングC言語編にはたしか、「0で呼ぶと処理系によりTCPをちゃんと呼び出さないことがあるから、正しく指定しようね」って書いてあったと思ったが。

私が著者にあえて言いたいのは-Wallオプションはつけようね。ソースコード中にヘッダー忘れるとか凡ミス多いぞ。strlen使ってるくせにincludeしているヘッダのどこにもstring.h呼んでないとか、exit使ってるのにstdlib.h使ってなくてなおかつ引数省略しているとか。exitの引数は、正常なら0、異常ならtrueになるどれか、必要ならsysexits.hに定義されている値を使うべきじゃないか?あと戻り値intで関数宣言しといて、エラー時は値返すけど、成功時はreturnで値返さないって駄目だと思うよ?ちゃんと0返そうよ。
ネットワーク使うプログラムは、頒布すると自分のPCじゃないんだよ?処理系にとらわれず完遂できるコードを書くべきじゃないか?(その辺は大学の講義資料か。斡旋機で処理系がすべて同一。)

構造体のエラーは、やっぱり、「例解UNIXプログラミング教室」の大半を理解しておかないと、無理じゃないか?

そういや、ソケットを使って通信するというより、ネットワークの処理はライブラリ作ってそっちにやらせるって感じでソケットをディープに・ギークいじってる感じはしなかったな。そっちは、TCP/IPソケットプログラミングC言語編の方が便利だな。

繰り返しになるが、Unixのプログラミング本でSocketの扱いがそこまで大きくない理由が分かった。いろんな意味で面倒なファイルだ。エッセンスはファイル操作じゃなくて、ファイルの中身だからな。流れさえ理解できてしまえばあとはmanなりネットなりで情報を得れば組めるものだかそこまで大きくは扱わない。なるほどな。


結論、
ネットワークゲームプログラミングの本だと思って買ったら思い違いを起こす。ネットワークプログラミングを飽きにくくするためにゲーム要素を取り入れている。(ゲームとしての重要コードは無いし、エラートラップも大学講義用に端折られている)
やり取りに必要なのは、データの作り方と動かし方なんだとという境地に達してしまった場合、TCP/IPソケットプログラミングC言語編の方が便利。


ゲームでMOD作ってる人いるじゃん。マイクラのMODLoaderとか、あれってどうやって作ってんだ?javaの場合は、逆コンパイルして自分のクラスに載せ替えて再コンパイルしてやれば乗っ取れそうな気がするが、C++とかの場合どうやってるんだ?
MyDLL作ってゲームのexe→MyDLL→本家DLL or 自分が用意した命令でやるのか?
システムコールはわかってるから、システムコール呼ばれる瞬間に割り込んでデータ書き換えて橋渡しするのか?
その辺が今一分からない。作れれば、ネット対戦できるようになるんだけどなぁ。

« CentOS6.4でLine入力の音が出ない | トップページ | Project YNP夏の新作発表 »

書籍・雑誌」カテゴリの記事

プログラミング」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Unixネットワークプログラミング入門:

« CentOS6.4でLine入力の音が出ない | トップページ | Project YNP夏の新作発表 »