[C# 서버에서 AS3 클라이언트 비정상 종료 체크하기]


TcpServer 에서 얻어온 client = server.AcceptTcpClient(); 

그리고

client.Client.Connected

라는 속성이 있는데 , 이것은 swf 가 종료 되었을때 체크가 불가능 하다.
그래서 예전에는 [한번 연결 , 한번 송수신 , 바로 종료] 의 매커니즘으로 안전적인 연결을 보장했다.

참고 (http://www.scripter.co.kr/entry/TCPSocket-안전한-Socket-연결과-버퍼데이터를-설정한-데이터전송-C-As3)

하지만 계속 연결을 보장해야 하는경우도 있지 않을까...

역시나 문제는 연결이 지속가능한지를 체크하여 소켓 루프를 사용가능한 상태로 만들어야 하는데 방법이 마땅치 않았다. 구지 방법을 찾자면 서로가 지속적으로 소켓을 통해

[서버 : 잘있냐? , 클라이언트 : 잘있다.] 는 연결이 건재함,
[서버 : 잘있냐? , 클라이언트 : ....] 는 연결이 손실됨 , 다시 연결 요청 

와 같이 지속적으로 물어 보는 방법이 있는데 매우 비효율적인 방법 아닌가... 참으로 서버와 클라이언트 , 둘다 득될것이 없는 방법이다.

그러던 와중 방법을 찾아 내었다.

 
while (true)
            {
                // 클라이언트 대기
                trace("wait....");
                TcpClient client;
                try
                {
                    client = server.AcceptTcpClient();
                }
                catch
                {
                    trace("ERR>> 비정상 종료");
                    return;
                }


                //환영 메세지
                byte[] sendByte = StringUTIL.StringToByte("connect Ok");
                client.GetStream().Write(sendByte, 0, sendByte.Length);
                client.GetStream().Flush();

                trace("send!");

                // client.GetStream().ReadByte()를 체크한다. 
                // 만약 연결이 유지 되고 있다면 -1 이 아닐테지만
                // swf 가 비정상 종료 , 혹은 종료 되거나 하면 -1 을 호출하여 
                // 아래의 루프를 벗어날것이다. 그리하여 소켓은 다시 사용 가능한 상태가 된다.    
                while (client.GetStream().ReadByte() != -1)
                {
                    //Console.WriteLine(c + " " + client.GetStream().ReadByte() );
                    
                    if (client.GetStream().DataAvailable)
                    {
                        NetworkStream ns = client.GetStream();
                        ns.Read(headerBuffer, 0, headerBuffer.Length);
                        string header = Encoding.ASCII.GetString(headerBuffer).Trim();
                        trace("header :" + header);

                        if (header == "close")
                        {
                            trace("cloader header!");
                            break;
                        }
                    }
                }
                trace("end!");


위의 코드 처럼 while (client.GetStream().ReadByte() != -1) 를 체크하여 루프를 돌린다면 충분히 체크가 가능하다.

물론 swf , 즉 클라이언트 프로그램이 종료 될때 close() 를 호출하여 서버에 [ 클라이언트 : 나 종료함! ~] 이라고 알려 줘야 하는게 정상이나 , swf 같은경우에는 프로그램이 종료될때 호출할수 있는 이벤트가 없다.
(하지만 AIR 는 있다.)

따라서 이부분때문에 연결을 유지 하는것이 매우 난감했으나 본 코드로 인해 상호연결의 유효성을 판단할수 있어서 
충분히 지속 연결 소켓을 만들수 있겠다.

   


하지만 위의 코드는 문제를 내포 하고 있다.
클라이언트로 받는 바이트를 1 씩 미리읽어 1바이트씩 이동 했다는것인데, 이것때문에 여럿 문제를 야기 한다.
이것의 해결책은 다음에 포스팅 하도록 한다.

그리고

if (client.GetStream().DataAvailable)
                    {

이 .. 문장도 문제가 있다.
Yamecoder 야매코더_
C# 2011.10.16 00:44

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 匿名 2014.11.10 17:32  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  3. BlogIcon mont blanc pens 2014.11.11 01:56  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  4. BlogIcon 眼镜批发 2014.11.12 00:51  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  5. BlogIcon moncler prezzi migliori 2014.11.12 11:44  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  6. BlogIcon moncler x pharrell williams down filled maya jacket 2014.11.12 11:46  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  7. BlogIcon officiel chaussure louboutin 2014.11.15 11:44  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  8. BlogIcon meizitang 2014.11.20 03:29  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  9. BlogIcon Ralph Lauren Danmark Udsalg 2014.11.23 08:08  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  10. 匿名 2014.12.03 05:44  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  11. 匿名 2015.01.07 17:45  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  12. 匿名 2015.01.07 17:48  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  13. 匿名 2015.01.15 12:20  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  14. BlogIcon 湿式除尘器系列 2015.01.19 14:37  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  15. 匿名 2015.02.06 14:13  수정/삭제  댓글쓰기

    습다大话西游服务端凡人修真服务端大话西游服务端页游服务端问道服务端

    跑跑卡丁车服务端英雄远征服务端幻灵游侠私服务端洪荒神话私服务端

    完美世界服务端烈焰服务端洛汗服务端新魔界服务端绝对女神私服务端


    魔兽私服开区一条龙服务-

    传奇私服开传奇一条龙服务-


    传奇广告代理-

    IDC服务器以及空间租用-

    魔域开区sf一条龙开区服务-


    客服咨询QQ(企鹅扣扣)1325876192

    Email:1325876192@qq.com

    商业版本免费开放下载




    紫川科技最新毁灭天下1.85狂雷独家合击热血复古三职业新装传奇服务端



    紫川科技20星大极品良装+80麒麟锻造中变传奇服务端



    紫川科技独家轻变1.89奥妙转生神龙锻造珍珑元素版传奇服务端



    紫川科技独家九转1.85四皇冠加倍装备特戒龙卫의마

  16. BlogIcon echarpe burberry pas cher 2015.03.27 21:10  수정/삭제  댓글쓰기

    우마sont séparés par une barrière,Grand Tonic inutile cardiaque, veuve si vous n'appréciez pas, c'est évident pour tout le monde.Dans burberry homme t shirt le processus de production et une longue durée de vie "Heihe historique.Certains fonctionnaires, la fte des Lanternes (Festival de printemps) de sept jours de vacances. de l'État de droit et de la m를네

  17. BlogIcon Burberry sac 2015.03.31 00:03  수정/삭제  댓글쓰기

    는지Chen Hao successivement à Fuyuan County,Dans la province du Yunnan son Ze Aluminium Industry Co. Ltd Qujing Zhongyi Fine Chemical Co, La décision a été libéré après jeudi, "- cette nouvelle monarchie Groupe félicite, c'est Junior "de lecture est en panne". un pont ci - dessous, htel.
    l'achèvement réussi de Pékin pour 관단

  18. 匿名 2015.04.01 06:28  수정/삭제  댓글쓰기

    일가In fact, AIRMAX and not stand still, today we join in the use of special powers of the Nike Air Max 2009 sale, AIRMAX identification of a new era to create. Nike Air Max 2009 sale, the use of a feature of the technology of today's most ardent Flywire.



    Although the use of new technologies and maintaining AIRMAX traditional shoe design line of the body, new technology and tradition in the col지리

  19. 匿名 2015.04.03 13:49  수정/삭제  댓글쓰기

    알일They are comfortable and keep your feet feel different! This year is tailored to the retro era, large and small, a wide range of classical styles are back to the attention of the population between the return series of the wind.



    Nike Air Max sneaker has a classic b-ball for a look around oreder the two basketball courts and also the pedestrian to complete. Nike Air Max 95, a draft model Spo및지

  20. 匿名 2015.04.04 02:54  수정/삭제  댓글쓰기

    지리presents the visible face of cloud computing that most people have already experienced. The advantages of web-based applications such as Gmail, Twitter, and Facebook are pretty obvious - there's nothing to download to your PC, you can access them from anywhere,Stop Fear - How to Stop Fear , they're constantly being enhanced and every time updates are made they become instantly available to any use조뉴

  21. 匿名 2015.04.09 00:24  수정/삭제  댓글쓰기

    는로Lacoste boots and a beret big mesh, or even the entire pleated skirt, tights and wool biker boots. The more adventurous may try to marry a trio monochrome black carrot trousers.



    Badia will be a mini-skirt skater, opaque tights and Minnetonka for a look kindly teenager, as she wants deliciously shifted pair of trousers, sweater and glasses under Cutler. Olympia for its partner with a slim we지있

[c# TCP socket] Clinet가 죽은것을 알아채기


<TCP 서버 에서 TCP클라이언트를 이용하는 상황에서..>

TcpClient 클래스 속성중 Connected  라는 속성이 있다. 말그대로 클라이언트가 살았는지 죽었는지

판단하는 속성인데 서버에서 잘 작동하지 않는다. ( 나만 잘 모르는 것일수도 있다.)

그리고 통상적으로 while 루프 안에 스트림을 읽어 오는 코드를 작성한다음

클라이언트 프로그램이 종료 되는경우를 TcpClient 클래스 속성중 Connected  를 이용하면

무한 루프에 빠진다.

해결책은 클라이언트로 오는 바이트 수가 "0" 인것을 확인하여 처리를 해주면 된다.



             while(true)
            {
                /***중요***/
                reciveByte = new byte[1024];
            
                data = reader.ReadLine();
                if(data == null)
                {
                    Invoke(mrg , "클라이언트가 죽었습니다");
                    AceptClient();
                    break;
                }
                
                
                /*** 중요 ***/
                else if(stream.Read(reciveByte , 0 , reciveByte.Length) == 0)
                {
                    Trace.WriteLine("EXIT");
                    AceptClient();
                    break;
                }
            }
/*** 중요 ***/ 라고 되어 있는 부분을 보면 된다.

byte[] 를 하나 만들어  Stream 의 Read 속성을 적용 시켜 주면 된다.

만약 공백이라면 "1" 바이트 를, 값이 날라오지 않는 경우라면 "0"  을 반환 함으로 Client가 죽었는것을 알수 있다.

추가로 첫번째 예외처리는 서버app 를 종료할때 생기는 에러를 대처하기 위함이다.

순간적으로 data 가 Null 값이 됨으로 while 를 탈출하게 해논것이다.
 
 
 
파일 전송중 클라이언트 사망을 눈치 채기 (2012,02,12)
http://scripter.co.kr/203

Yamecoder 야매코더_
C# 2010.12.04 03:51

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. BlogIcon cheap moncler coats 2014.09.11 04:22  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  3. BlogIcon canada goose online store 2014.09.18 00:27  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  4. BlogIcon 匿名 2014.09.28 14:38  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  5. BlogIcon discount oakley sunglasses 2014.10.04 13:58  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  6. BlogIcon discount oakley sunglasses wholesale for men 2014.10.16 08:17  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  7. 匿名 2014.11.10 17:32  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  8. BlogIcon 深圳横岗眼镜批发 2014.11.12 00:51  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  9. BlogIcon Discount sharp tv 2014.11.12 03:17  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  10. BlogIcon moncler donna 2011 2014.11.12 11:44  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  11. BlogIcon moncler angers jacket uk 2014.11.12 11:46  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  12. BlogIcon Ralph Lauren vinterjakke 2014.11.23 08:08  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  13. BlogIcon furla handbags 2014.11.28 08:26  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  14. 匿名 2014.12.03 05:44  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  15. 匿名 2015.01.15 12:20  수정/삭제  댓글쓰기

    이용약관위배로 관리자 삭제된 댓글입니다.

  16. 匿名 2015.02.11 14:03  수정/삭제  댓글쓰기

    일습大话西游服务端凡人修真服务端大话西游服务端页游服务端问道服务端

    跑跑卡丁车服务端英雄远征服务端幻灵游侠私服务端洪荒神话私服务端

    完美世界服务端烈焰服务端洛汗服务端新魔界服务端绝对女神私服务端


    魔兽私服开区一条龙服务-

    传奇私服开传奇一条龙服务-


    传奇广告代理-

    IDC服务器以及空间租用-

    魔域开区sf一条龙开区服务-


    客服咨询QQ(企鹅扣扣)1325876192

    Email:1325876192@qq.com

    商业版本免费开放下载




    紫川科技最新毁灭天下1.85狂雷独家合击热血复古三职业新装传奇服务端



    紫川科技20星大极品良装+80麒麟锻造中变传奇服务端



    紫川科技独家轻变1.89奥妙转生神龙锻造珍珑元素版传奇服务端



    紫川科技独家九转1.85四皇冠加倍装备特戒龙卫법알

  17. 匿名 2015.03.01 14:22  수정/삭제  댓글쓰기

    버가大话西游服务端凡人修真服务端大话西游服务端页游服务端问道服务端

    跑跑卡丁车服务端英雄远征服务端幻灵游侠私服务端洪荒神话私服务端

    完美世界服务端烈焰服务端洛汗服务端新魔界服务端绝对女神私服务端


    魔兽私服开区一条龙服务-

    传奇私服开传奇一条龙服务-


    传奇广告代理-

    IDC服务器以及空间租用-

    魔域开区sf一条龙开区服务-


    客服咨询QQ(企鹅扣扣)1325876192

    Email:1325876192@qq.com

    商业版本免费开放下载




    紫川科技最新毁灭天下1.85狂雷独家合击热血复古三职业新装传奇服务端



    紫川科技20星大极品良装+80麒麟锻造中变传奇服务端



    紫川科技独家轻变1.89奥妙转生神龙锻造珍珑元素版传奇服务端



    紫川科技独家九转1.85四皇冠加倍装备特戒龙卫표일

  18. BlogIcon echarpe burberry homme pas cher 2015.03.27 21:10  수정/삭제  댓글쓰기

    로상Parfois. vous le petit de l'ancienne Cor&eacute;e. et de maintenir le cot,Le Parti communiste chinois a envoy&eacute; un grand nombre des cadres et agents responsables de joint," Veuillez &eacute;galement un "nouveau P&eacute;kin". 闻东国. mais deux ermite monarque sans chemise homme burberry pas cher int&eacute;rts,Ce silence, je pense que c'est parce que son billet.Parce que le contrle sup&eacute;r일립

  19. BlogIcon chemisier burberry 2015.03.31 00:03  수정/삭제  댓글쓰기

    수있La broche de g&eacute;n&eacute;ration de P&eacute;kin de "Division" est le premier jour de la limite de violations de sanctions ne sont pas utilis&eacute;s (figure) dans le nouveau r&eacute;seau -

    Source: Chinanews mise &agrave; jour: 2015-03-29 04: 40: 52 de classification: les mots - cl&eacute;s: 李婷婷, pratique, de P&eacute;kin, le tableau de ticket

    P&eacute;kin "g&eacute;n&eacute;ration q로있

  20. 匿名 2015.04.04 02:54  수정/삭제  댓글쓰기

    알상Like the above, knitted hat and a jacket with a lining seam searsucker-like. We're not normally a heavy logo'd pieces,What You Should Know Before Y, but the embroidered letters feels like a part of the winter-generic design.



    Few have left thoughts about the current collection. Moncler is not for everyone because not everyone can come from the look of nyloned painted in a bright color,, but 메서

  21. 匿名 2015.04.05 10:19  수정/삭제  댓글쓰기

    로네火车采集器html简单模板示范






    Run With Dragon Meditation Energy







    [标签:来源]








    After you have been training dragon meditation (DM), hope you can enjoy and get benefit from your DM activities. Now, I will update one benefit with DM. On e-book and some articles I was mentioned that DM can do in water, under the sun, in the sand, etc. Also, you can do in various positions as l들데

Powerd by Tistory, designed by criuce
rss