IISの代わりに独自のIISサーバーを作成するには、C#(C ++)ソケットバックエンドを使用します

 この記事では、Socket TCP / IPプログラミングの知識について触れています。実際、これは非常に単純なコンテンツです。表示されていない場合は読み上げて、後でもう一度読むことができます。非常に単純な場合があります。

 

多くの人がウェブサイトの作成に慣れており、ウェブサイトのバックエンドサービスにIISやTomcatなどの高度なバックエンドを使用していますが、これらのバックエンドが登場する前は、どのようにウェブサイトを作成したのでしょうか。彼らが一番下で遵守している規範と基準は何ですか?

 

これはhttpプロトコルとhtml、js、css標準です。これらはすべて国際的に統一された標準であり、.net、java、phpなどの言語とは何の関係もありません。たとえば、次のコードです。

<html>

<ボディ>

<form runat = "server" id = "form1">

<%

string str_response = "hello world";

.........................................。

Response.Write(str_response);

%>

<asp:Button ID = "bn_1" runat = "Server" Text = "点击" />

</ form>

</ body>

</ html>

長いコードは最終的に次のように解析されます

<html>

<ボディ>

<form id = "form1" action = "">

こんにちは世界

<input type = "submit" value = "点击" name = "bn_1" />

</ form>

</ body>

</ html>

 

IISは、<%%>のコンテンツを出力するコンテンツに変換すると同時に、<asp:のこれらのタグを対応するタグ(ここでは<input>タグ)に変換するのに役立ちます。これは、の非標準タグです。 html。iisによって指定されたタグに属し、iisは、これらのタグを標準タグに変換して顧客に返す責任があります。

 


以上が基本です。ウェブサイトを書いたことのある人の多くは、何が起こっているのか知っていると思います。以下のトピックに戻りましょう。

次のコードは、誰もが使用することはめったにありません。

GET /siteserver/mypage.youlike?h_username=myname HTTP / 1.1
Accept:* / *
Accept-Language:zh-cn
Content-Type:application / x-www-form-urlencoded
Accept-Encoding:gzip、deflate
User-Agent: Mozilla / 4.0(互換性; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152;

.NET CLR 3.5.30729)
ホスト:127.0.0.1:45632
コンテンツの長さ:93
接続:Keep-Alive
Cache-Control:no-cache

実際には、これは非常に簡単です。これは、クライアントIEのURL開くものですhttp://127.0.0.1:45632/siteserver/mypage.youlike?h_username=mynamehttp://127.0.0.1:45632すべてが受信したがこのウェブサイトの背景プロトコルコード。

 

これらの文字列は改行で区切られます。
このうち、127.0.0.1:45632は標準サイトのアドレス、127.0.0.1はIP、45632はサーバーによって監視されるポートです。
User-Agentがブラウザ情報になった後、GETとHTTP / 1.1の間の/siteserver/mypage.youlikeがアクセスするターゲットアドレスになります。もちろん、自分で作成したバックエンドの場合、このターゲットアドレスは実際にはインデックスなどです。 index。aspxとして、サーバーに必要なデータを伝えます。mypage.youlikeはこのファイルに実際に存在するか、サーバーによって定義された単なるインデックスである可能性があります。サービスのswitchステートメントはそれをmypage.youlikeと判断します。対応するデータが返されます。
もちろん、/ siteserver /mypage.youlikeの後にgetパラメータ情報が続きます。Webを作成する友人は非常に明確でなければならないと思います。


さて、上記はgetの例ですが、相手が郵便で来た場合はどうなりますか?それは実際には非常に単純で、最後にたくさんのものを追加するだけです。


POST /siteserver/mypage.youlike?h_username=myname HTTP / 1.1
Accept:* / *
Accept-Language:zh-cn
Content-Type:application / x-www-form-urlencoded
Accept-Encoding:gzip、deflate
User-Agent: Mozilla / 4.0(互換性; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152;

.NET CLR 3.5.30729)
ホスト:127.0.0.1:45632
コンテンツの長さ:93
接続:Keep-Alive
Cache-Control:no-cache

 

page = 12&title_id = 300


サーバーがこれらのデータを受信した後、サーバーは何をしますか?

実際、上記のプロセスは要求要求プロセス、つまりサーバー受信プロセスであり、サーバー側の他のプロセスはリターンと呼ばれ、応答の応答プロセスです。次に何をしますか?

参照用のコードを提供します。

        if(str_request_file == "/ siteserver / mypage.youlike")
       {                 string send_msg = "<!DOCTYPE HTML PUBLIC /"-// W3C // DTD HTML 4.0 Transitional // EN / ">";                 send_msg + = "<html xmlns = /" http://www.w3.org/1999/xhtml/ ">";                 send_msg + = "<head> <meta http-equiv = /" content-type / "content = /" text / html; charset = gb2312 / "/> <title>广业IISサーバー</ title> </ head> <body>";                 send_msg + = "<form action = /" http://127.0.0.1/siteserver/gps.aspx/ "method = /" post / "id = /" f1 / "name = /" f1 / ">";                 send_msg + = "






                send_msg + = "</ form>";
                send_msg + = "<script type = /" text / javascript / ">";
                // send_msg + = "document.getElementById(/" f1 / ")。submit();";
                send_msg + = "</ script>";
///根取ページ= 12&title_id = 300、h_username = mynameこれ目参数读取数データベース库、メッセージ一内容加されてsend_msg里
                send_msg + = "</ body>";
                send_msg + = "</ html>";
                バイト[] msg = System.Text.Encoding.GetEncoding( "gb2312")。GetBytes(send_msg);

                string str_senddd = "HTTP / 1.1 200 OK / r / nVia:1.1 GY-14SWFMJH7AP2 / r / nConnection:Keep-Alive / r / nProxy-Connection:Keep-Alive / r / nContent-Length:" + msg.Length.ToString ()+ "/ r / nContent-Type:text / html / r / nServer:GYXX / 1.0 / r / nCache-Control:private / r / n / r / n";
                sendtoclient(sock、str_senddd + send_msg);


          }


ここでのsendtoclientメソッドは、文字列str_senddd + send_msgをソケットに書き込むことです。


実際、最も単純なiisサービスは、このような読み取りと書き込みのプロセスです。HTTPプロトコルは、このプロセスと切り離せません。これを確認して入力してください。幸運は個人によって異なります。

 

連絡先:QQ:13896398、Tel:13437839547

おすすめ

転載: blog.csdn.net/handsome0916/article/details/4581503