当前位置: 首页>>代码示例>>C#>>正文


C# Header.Recv方法代码示例

本文整理汇总了C#中Header.Recv方法的典型用法代码示例。如果您正苦于以下问题:C# Header.Recv方法的具体用法?C# Header.Recv怎么用?C# Header.Recv使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Header的用法示例。


在下文中一共展示了Header.Recv方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: OnSubThread

        //接続単位の処理
        protected override void OnSubThread(SockObj sockObj)
        {
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

            var sockTcp = (SockTcp)sockObj;

            var remoteIp = sockTcp.RemoteIp;

            //opBase 及び loggerはバーチャルホストで変更されるので、
            //このポインタを初期化に使用できない

            bool keepAlive = true;//レスポンスが終了したとき接続を切断しないで継続する

            //1回目の通信でバーチャルホストの検索を実施する
            var checkVirtual = true;

            var request = new Request(Logger,sockTcp);//リクエストライン処理クラス

            //受信ヘッダ
            var recvHeader = new Header();

            //Ver5.1.x
            string urlStr = null;//http://example.com

            //接続が継続している間は、このループの中にいる(継続か否かをkeepAliveで保持する)
            //「continue」は、次のリクエストを待つ 「break」は、接続を切断する事を意味する

            WebStream inputStream = null;
            var outputStream = new WebStream(-1);

            while (keepAlive && IsLife()) {
                int responseCode;

                //***************************************************************
                // ドキュメント生成クラスの初期化
                //***************************************************************
                var contentType = new ContentType(Conf);
                var document = new Document(Kernel, Logger, Conf, sockTcp, contentType);

                var authrization = new Authorization(Conf, Logger);
                var authName = "";

                //***************************************************************
                //データ取得
                //***************************************************************
                //リクエスト取得
                //ここのタイムアウト値は、大きすぎるとブラウザの切断を取得できないでブロックしてしまう
                var requestStr = sockTcp.AsciiRecv(Timeout, this);
                if (requestStr == null)
                    break;
                //\r\nの削除
                requestStr = Inet.TrimCrlf(requestStr);
                //Ver5.8.8 リクエストの解釈に失敗した場合に、処理を中断する
                //request.Init(requestStr);
                if (!request.Init(requestStr)){
                    break;
                }

                //ヘッダ取得(内部データは初期化される)
                if (!recvHeader.Recv(sockTcp,(int)Conf.Get("timeOut"),this))
                                break;

                {
                    //Ver5.1.x
                    var hostStr = recvHeader.GetVal("host");
                    urlStr = hostStr==null ? null : string.Format("{0}://{1}",(ssl != null)?"https":"http",hostStr);
                }

                //入力取得(POST及びPUTの場合)
                var contentLengthStr = recvHeader.GetVal("Content-Length");
                if(contentLengthStr != null) {
                    try{
                        //max,lenはともにlong
                        var max = Convert.ToInt64(contentLengthStr);
                        if(max!=0){//送信データあり
                            inputStream = new WebStream((256000<max)?-1:(int)max);
                            var errorCount = 0;
                            while(inputStream.Length<max && IsLife()){

                                var len = max - inputStream.Length;
                                if (len > 51200000) {
                                    len = 51200000;
                                }
                                var b = sockTcp.Recv((int)len, (int)Conf.Get("timeOut"),this);
                                if (!inputStream.Add(b)) {
                                    errorCount++;//エラー蓄積
                                    Logger.Set(LogKind.Error, null, 41, string.Format("content-Length={0} Recv={1}", max, inputStream.Length));
                                } else {
                                    errorCount = 0;//初期化
                                }
                                Logger.Set(LogKind.Detail, null,38, string.Format("Content-Length={0} {1}bytes Received.", max, inputStream.Length));
                                if (errorCount > 5){//5回連続して受信が無かった場合、サーバエラー
                                    responseCode = 500;
                                    goto SEND;//サーバエラー
                                }
                                Thread.Sleep(10);
                            }
                            Logger.Set(LogKind.Detail, null, 39, string.Format("Content-Length={0} {1}bytes", max, inputStream.Length));
                        }
//.........这里部分代码省略.........
开发者ID:jsakamoto,项目名称:bjd5,代码行数:101,代码来源:Server.cs


注:本文中的Header.Recv方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。