[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지있

Powerd by Tistory, designed by criuce
rss