2008-02-01から1ヶ月間の記事一覧

SocketAsyncEventArgs を使ったサーバーを作る

C#

まぁ、MS の公式サイトに載ってるのをほぼぱくっただけですが。 Begin/End パターンに見慣れているので、StartAccept を BeginAccept にしたってだけ。受け入れたクライアントを閉じる処理はしていない。OnAccept は virtual にしておいた。 Server.Start() …

HTTP のリクエストを解析する

HTTP のリクエストを解析し、プログラム上で扱いやすくするクラス。 using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Text; using System.IO; namespace ReadTest { class Request…

CONNECT のトンネリングは非同期で

CONNECT では切断されるまでつなぎ続けるのがベストっぽいので非同期メソッドをつかって処理しよう。 Socket.ReceiveAsync() でブラウザ側から読んで、読むのに使った SocketAsyncEventArgs をそのまま オリジンサーバーに Socket.SendAsync() で送ればいい…

ストリームから1行読み取る

ストリームから1行読み取りたいなら、StreamReader なんかが使えるわけだけど、文字列としてしか扱えないので不便だ。HTTP 通信ではヘッダまでは ASCII で読んで良いが、それ以降は画像だったり書庫だったりのデータが送られてくる事があるので、StreamReade…

C# で作る簡単プロクシサーバー

追記: 2008/12/28 改訂版 プロクシサーバーの作成は難しいです。ブラウザ側とプロクシ間の keep-alive と、プロクシとオリジンサーバー間の keep-alive ができないといけません。その辺の管理がややこしい。というわけで .NET Framework にぜんぶやってもら…

Safari for Windows Public Beta Seed 31A7

Safari for Windows Public Beta Seed 31A7 が公開されました。スクリーンショットです。 フォントスムージング機能はかなり気に入っています。Windows のフォントは見にくい(醜い)ですから、フォントスムージングのおかげでかなり綺麗に見えます。 普段は F…

CONNECT のトンネリング

CONNECT で SSL 通信をトンネリングするとなんか重くなるなーとおもったら無限ループしてた。通信終わっても Socket.Connected == false にはならないのね。 切断されるまでトンネリングするっていうループで、切断の判断を Socket.Connected でしてた。でも…

Keep-Alive の実装

HTTP プロキシサーバを作っていて、最もやっかいなのは Keep-Alive の実装かな。 ブラウザ側との Keep-Alive とウェブサイト側との Keep-Alive をしなければならない。 (Browser Proxy, Proxy WebSite) ウェブサイト側の Socket を再利用しようとすると、既…

持続的接続

とりあえずなプロキシサーバーの実装ではあるが、keep-alive もできるようになってきた。ただ、例外処理はほとんどしていないのでその辺が問題だなー。ブラウザの中止ボタンとかで接続が止まったりとか、Origin Server が切断してきたりとか、なんやらするこ…

言語の選択

自分が初めてふれたプログラミング言語は Delphi だった。とりあえず ShowMessage() して動かした。だけど、何となく書きにくかった覚えがある。 んで、C# ってもんが出たってきいて Visual C# を買った。高かったけど。やってみるとコードは書きやすいと思…

Proxy Server について

名前は今後考えるとして・・・。 まず、考えがあまかった。HTTP の仕様なんてほとんどみてなかった。リクエストラインとかレスポンスラインをとりあえず受信して、それをそのまま送信すればいいやって思ってた。でも仕様をみてみると、持続的接続とかあって…