Socket 에 Header 정보와 같이 묶어 보내기



정보를 보낼때 헤더는 참 유용하고 필수적이다. 편지를 쓴다고 생각하자면, 받는사람 , 주소 , 우편번호 등등이 헤더에 
해당할것이고 , 동내 구멍가게에서 라면을 사더라도 , 이라면이 무슨라면인지 , 매운맛인지 순한맛인지 ,조리법은 어떻
게 되는지 등등이 해더에 해당하는 정보라고 생각한다.

이처럼 무언가를 보낼때 이것이 어떠한 것이다 라는것을 표현할때는 조금은 바이트 배열을 이해할 필요가 있다.
as3 에서는 ByteArray에 해당할것이고 , c# 에서는 Stream 등에 해당할것이다.

그리고 해더는 Text로 읽을수 있는 정보일것이고, (물론 어느 오브젝트 바이트 배열로 하겠다면 구지 텍스트가 아니어도 된다. ) 컨텐츠 영역은 Text일수도 있고 바이너리 일수도 있다. 

문제는 없다. 뭐 어찌되었든 바이트로 넘어오고 약속된 영역을 텍스트로 치환하느냐, 바이너리로 통과 시키냐의 차이이다. 

아래의 그림은 헤더를 보내는 한가지 아이디어가 될것이다. 무조건 0바이트 부터 128 바이트까지 텍스트로 된 헤더라고 가정하고 있다. 혹 헤더가 128이 채워지지 않았다면 인위적으로 채워 버려 꼭 128을 만들어 버린다. ( 내가 생각하는 헤더에는 경로 , 타입, 기타코멘트 등등해서 128바이트면 충분하다고 생각해서 128이라고 한것, 그뿐이다.)

그리고 129번째 바이트 부터는 원하는 내용을 채우면 된다.
(이러한 해더의 아이디어를 발전시키고 싶다면 유명한 포토샵파일 PSD 의 바이트코드를 분석해 보라. 기가막히게 순수하고 심플하게 되어 있다.)



그럼 위의 그림을 토대로 코드를 한번 보자 

As3 에서 헤더 정보로 경로를 Text형대로 보내고 나머지는 카메라에서 캡쳐 받은 png포멧을 보낸다.
c#은 헤더로 넘어온 것을 FileStream의 경로로 지정하고 내용을 해당 경로에 저장한다.(버퍼의 사용은 이전글을 참고)

c# 서버
using System;
using System.Windows;
using System.Net.Sockets;
using System.Threading.Tasks;
using System.IO;
using System.Net;
using System.Text;

namespace testEncoderRecieve
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
        }

        private Task ServerThread;
        private TcpListener server;
        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            ServerThread = new Task(startServerThreaed);
            server = new TcpListener(System.Net.IPAddress.Parse("127.0.0.1"),5555);
            //
            ServerThread.Start();
        }
        void startServerThreaed()
        {
            //서버 스레드가 시작되고 서버가 시작되었다.
            Console.WriteLine("startServerThread");
            server.Start();

            //컨텐츠 버퍼와 헤더버퍼를 생성하였다.
            Byte[] buffer = new Byte[64];
            Byte[] headerBuffer = new Byte[128];
            int testCount = 0;
            while (true)
            {
                TcpClient client = server.AcceptTcpClient();
                NetworkStream netStream = client.GetStream();
                //netStream 에서 지정된 해더 바이트버퍼 만큼읽어서
                //해더정보를 입수한다.
                //그리고 netStream의 포지션은 128 이 되었다.
                netStream.Read(headerBuffer, 0, headerBuffer.Length);
                String rowHeader = Encoding.ASCII.GetString(headerBuffer);

                //String.Trim 을 이용해 불필요한 공백을 
                //제거하고 딱 필요한 헤더만 추출했다.
                string header = rowHeader.Trim();
                FileInfo fInfo = new FileInfo(header);

                //이전과 같이 파일 스트림을 생성하였고,
                //파일경로로는 헤더에서 넘어온 정보를 사용하였다.
                //그리고 여기서 읽을 netStream의 포지션은 129부터 이다.
                FileStream fs = new FileStream(fInfo.FullName, FileMode.OpenOrCreate, FileAccess.Write);
                int i = 0;
                while ((i = netStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    fs.Write(buffer, 0, i);
                }
                fs.Close();
                netStream.Close();
                client.Close();
                ++testCount;
            }
        }
    }
}


as3 클라이언트
package {
    import flash.events.Event;
    import flash.net.Socket;
    import flash.utils.ByteArray;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.media.Camera;
    import flash.media.Video;
    /**
     * @author superSc_PC
     */
     
    [SWF(width = "1000")]
    public class Main extends Sprite
    {
        private var cam : Camera;
        private var vid : Video;
        private var captureBitmap : Bitmap;
        
        private var socket : Socket;
        private var headerBufferSize : int = 128;
        private var header : ByteArray = new ByteArray();
        private var captureByte : ByteArray;
        public function Main()
        {
            //필요한것들을 생성했다.
            cam = Camera.getCamera();
            vid = new Video();
            vid.attachCamera(cam);
            captureBitmap = new Bitmap(new BitmapData(vid.width, vid.height));
            captureBitmap.x = vid.width;
            addChild(vid);
            addChild(captureBitmap);
            stage.addEventListener(MouseEvent.CLICK    , takePic);
            
            socket = new Socket();
            socket.addEventListener(Event.CONNECT, connectFn);
            
            //header 에 필요한정보를 입력하였다.
            //그리고 바이트의 공백을 매꾸기 위해 while루프로 쓰레기 정보들을
            //입력하였고 마지막 바이트로 줄바꿈"\n"을 입력 하였다.
            header.writeUTFBytes("d:/testAS.png");
            while(header.position < headerBufferSize-1)
            {
                header.writeUTFBytes(" ");
            }
            header.writeUTFBytes("\n");
        }
        
        
        private function connectFn(event : Event) : void {
            if (captureByte != null && captureByte.length > 0)
            {
                //이전과 다르게 소켓에 연달아 2개의 바이트들을 보낸다.
                //처음에는 헤더정보를 다음엔 캡쳐된 png를 보낸다.
                //역시나 보내고 난뒤에 소켓을 죽인다.
                socket.writeBytes(header);
                socket.writeBytes(captureByte);
                socket.flush();
                socket.close();
            }
        }

        private function takePic(event : MouseEvent) : void {
            captureBitmap.bitmapData.draw(vid);
            captureByte = PngEncoder.encode(captureBitmap.bitmapData);
            captureByte.position = 0;
            if(socket.connected == false)
            {
                socket.connect("localhost", 5555);
            }
        }
    }
}


Yamecoder 야매코더_
C# 2011.03.04 23:35

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 匿名 2015.04.14 02:08  수정/삭제  댓글쓰기

    드마dobbiamo far capire direttamente nel metallo raro, mentre qualche caduta poco prima si cercherà una cosa Molte persone potrebbero semplicemente riferirsi ad esso come la fortuna;? forse dichiarando,Scarpe Hogan Outlet, tu sei solo fortunato e nel caso in cui molte persone cortesi soddisfatti. Di conseguenza, è la tua delusione. Potreste prendere, beh, tentare un ulteriore sforzo e può ben esercita상니

  3. 匿名 2015.04.14 02:15  수정/삭제  댓글쓰기

    종단in via di sviluppo, sviluppo software, e anche la creazione di contenuti * deve essere considerato esclusive e fondamentale che chiunque o forse una classe che siete i reclutatori. Un autonomi devono portare alla mente loro stessi in quanto a tempo parziale (spazio) ma cruciali (spazio) dipendenti della shopper con dare le merci in che framework.Of India, Cina e Taiwan, Danimarca, Sezione centrale및겠

  4. 匿名 2015.04.14 02:23  수정/삭제  댓글쓰기

    에선simili. Società di viaggi aerei enormi di solito chiedono più rispetto alle imprese in scala ridotta. Io vi consiglio di dare un'occhiata a controllare e prezzi dei vostri minore attività delle compagnie aeree commerciali e si potrebbe ottenere un vettore a basso prezzo d'aria con un aumento pari o meno la stessa qualità di operatori service.Tour sono inoltre l'utilizzo del web per la ricerca di b분드

  5. 匿名 2015.04.14 02:31  수정/삭제  댓글쓰기

    네일il veterinario? Noi non si sentono quindi.Una cosa che la maggior parte di noi ascolta un sacco di si: i lavoratori potranno utilizzare un piccolo roditore forte (generalmente neofiti) insieme con la gallina sta per ululare come vedere .. Proprio quello che fa suo il nostro coniuge realizzare? Urlo Primo Way up! Insieme con quello che sarà il pappagallo completare? Ululare Molto di più!Ancora una 우메

  6. BlogIcon salomon speedcross 3 2015.04.14 04:19  수정/삭제  댓글쓰기

    어메amed item east, burly physique, covered with thick armor package, the most peculiar is that these crustaceans is actually growing out from his body.
         "Non-person can not be a big perseverance!" Another nod agreed Tao, who eyes narrow, his eyes cold, back one pair of transparent onion skin, like a crystal clear as crystal. This person named Qian Qing, was under the command of one of the famou뉴상

  7. BlogIcon louis vuitton outlet italia 2015.04.14 05:23  수정/삭제  댓글쓰기

    를예Diventa un vero elite.
    E Tianhuan Dipartimento Warfare, è diventato l'altro lato della mola.
    Non ha alcuna speranza di vittoria, schiacciato, e invitanti vittime.
    Gong Ye poca tolleranza silenziosa.
    Ha portato talento marziale questo giorno nel grande anello è anche liscia, Porta sofferto normali fratelli Scuola culto e la cura per gli anziani.
    Non ha mai pensato할리

  8. BlogIcon 食品进口代理公司 2015.04.14 05:41  수정/삭제  댓글쓰기

    분어力争年末前农村风俗旅游欢迎户50%实现量化分级办理。另外,来岁整体物价程度约为3%摆布。 采编:aimee 文章来历: 泰克正式颁布发表扩大其"黄金保障"打算;5月14日,企业相干新闻:
    1、 因为天燃气在湖南使用时候不长,已完全投入使用,为减缓凸起的供需抵触,建成后,康师傅方德国二手旧机械进口报关面发布若旁证据,红烧品类便利面市场据有率阑珊了3.涨幅0.01元 千克,依照《浙江省大气重污染应急预案》划定,与此同时。
    2、 始终介入环保法点窜论证工作的北京年夜学能源与情况法研究中间主任汪劲说,即使已颠末三次审议,增强查验,但养阿根廷红酒进口报关殖厂家仍在国内。抄水员周庆强负责扶植红酒进口批文单证路、岔道街、经十路部门路段共7000多户的水表检查,提高小我保护意识,导读:据外媒2012年3月30日动静客户的工作流程将被大大地简化。其进口产物、手艺未申报过中心、省财务补助。 我委将于1어에

  9. BlogIcon toms online 2015.04.14 06:53  수정/삭제  댓글쓰기

    관일In going to be the mountains, las campanas estanasics baratas sonando
    Y los chicos,
    Los chicos estan besando
    I don’t speak your language, ah no
    I don’t speak your I don’t speak your Jesus Cristo
    Conspiracy theorist and attention Nike air max billigqueen size Lady Gaga will be the at it again. Above all your family members make an appointment with going to be the lyrics to understand more abo런리

  10. BlogIcon zapatillas asics 2015.04.14 06:53  수정/삭제  댓글쓰기

    정습Hard Proof Austin Afrobeat collective, Hard Proof performed an all in one live set along with radio and aimed at your website listeners last good night at KVRX radio at T73413heasics padel baratas University to do with Texas. The nine-piece band features account holders concerning The Calm Blue Sea, The Echocentrics, Ocote Soul Sounds and Black Joe Lewis and going to be the 한어

  11. BlogIcon Cheap Oakley Jupiter Sunglasses 2015.04.14 09:32  수정/삭제  댓글쓰기

    뉴가In daily life, a pair of sunglasses, T-shirts and jeans, a single product range of children's play star swept the fashion industry a strong sense of nostalgia.Oakley glasses are everyone's favorite, because it is a collection of glasses comfortable, practical, artistic.Sunglasses frame the choice of materials and frames workmanship is generally not very particular about, the consumers wear life in버을

  12. BlogIcon nike air max 1 2015.04.14 11:37  수정/삭제  댓글쓰기

    마드Why Rent When You Can Own a Belize Real Estate Home
    Travel Articles | May 11 2011

    free run 2 femme air maxTransparent pricing me nike air max 2015 /fr/presentation ........

    nike air max 90


    A lot of people thought that they ought impartial
    rent out a vacation home among Belize anytime they want to visit, saving
    them costs on lodging and food as opposed to checkin로서

  13. BlogIcon roshe run pas cher 2015.04.14 11:39  수정/삭제  댓글쓰기

    있비Being Aware What One Can oreon 9f3ejjqwq Pertaining To Taxis In Malaysia
    Travel Articles | July 23, 2012

    roshe run rouge But this comes along with risks. There has been accounts of tourists
    being scammed air max one femme along some drivers. If you're an adventurous conscience below are
    some ways aboard how you may defend roshe run yourself air max one and prefer air max 95Get Cash f리간

  14. BlogIcon www.gesturehotels.com 2015.04.14 13:23  수정/삭제  댓글쓰기

    일다Owning Your Own Business: Here Are A Couple Of Steps To Business Success,jordan xi low hoyas
    Business Articles | November six 2008

    Owning your own business and having steady small happening growth namely almost having a appealing performance strategy,freehoro.com. The right small affair book or small business ebook can have your small affair running aboard a narrow to success,low bred 1적지

  15. BlogIcon jordan 11 bred 2015.04.14 13:27  수정/삭제  댓글쓰기

    마가ing or early summer is the most popular time for weddings. But no matter when you're planning your wedding,double nickel 10, the stress can be overwhelming! The average cost of a wedding in the United States is over $22,low hoyas 11s,000. About $7,double nickel 10,630 of that is spent on the wedding reception (source: American Wedding Study,low hoyas 11, 2002). From increasing costs to angry relat리전

  16. BlogIcon jordan retro 10 double nickel 2015.04.14 13:27  수정/삭제  댓글쓰기

    지크How to Secure the Interest of Your Prospects,jordan 11 low hoyas
    Business Articles | June 11 2006

    Being in the business naturally means you need to be competitive plus lift up the competition,jordan xi hoyas. This is the hidden in series to ascend the ladder of success,jordan 11 low hoyas. But there's accessory to sale that anybody business especially those who are tyro in the field ough마및

  17. BlogIcon Raul Jimenez Atletico Madrid Jersey 2015.04.14 16:05  수정/삭제  댓글쓰기

    있를This is amongst the hard actions to carry out as the receiver may be blocked by the rival on its way to get the ball. In 1915, the organization was renamed towards the Rolex Watch Company Ltd. By playing the NFL Pro 2012, James Rodriguez Real Madrid Jersey any gamers will get all the official NFL and also NFL Players License. Using two electric battery on simultaneous the flexibility sketch can b있히

  18. BlogIcon advantagerealestatetx.com/category/beaumont/ 2015.04.14 17:03  수정/삭제  댓글쓰기

    예있your family have ever been in your a minimum of one interview at any point and was able to find jordan bobcats 7 a resource box difficult to learn more about think concerning questions for additional details on ask,well it has ever been interest that all your family jordan 13 low bred members really will want have prepared a good deal more along with jordan 5 going to be the interview,world wide w시료

  19. BlogIcon www.sendanimacion.com/decoracion-con-globos 2015.04.14 17:05  수정/삭제  댓글쓰기

    단립The Breathtaking Beautiful Destinations all over the Kerala so as to jordan midnight navy 5 Explore


    Soaked in your splendor concerning going to low bred 13 be the nature, emerald blooming landscapes, alluring greenery, absorbing and absorbing sightseeing acne breakouts and added chiefly alluring sightseeing attractions, Kerala a multi function tiny emerald blooming accompaniment amid forth th들조

  20. BlogIcon low white infrared 6s 2015.04.14 17:06  수정/삭제  댓글쓰기

    지로The decline similar to midnight navy 5s top end homes and prices rise along the lines of Mid-segment property


    According to explore a jordan retro 13 low bred multi function February credit rating by Macquarie Research in Delhi going to be the residential real estate investment prices have risen on such basis as 20% and in Gurgaon and Noida on Jordan 6 low white infrared the basis of 15%.The p의일

  21. BlogIcon sneakers golden goose 2015.04.14 17:09  수정/삭제  댓글쓰기

    부종lei lo ha usato. Quindi, lei era sufficientemente identificata con il signore di sentirsi compromzato dal suo essere più del solito ridicolo; e quindi, essendo tutt'altro che carente in velocità, a volte venne in suo soccorso contro Gowan, e lo ha fatto un ottimo servizio. Ma, mentre si fa questo,golden goose sito ufficiale, si vergognava di lui, indeterminato se sbarazzarsi di lui o più decisamen리크

[TCPSocket] 안전한 Socket 연결과 버퍼데이터를 설정한 데이터전송 (C# <-> As3)


소켓사용을 꺼려하는 이유중 하나는 연결의 지속성을 보장하기가 까다롭기 때문이다. 또한 그것을 서로 스로스 체킹

하는 코드를 작성하기가 번거럽기 때문이기도 하다.

하지만 생각을 바꾸어 왜? 소켓을 항상 연결시켜 놔야 할까? 물론 실시간 데이터전송 같은경우 , 즉 마우스 좌표에 따라 무었을 지속적으로 움직여야 한다거나 하는 실시간적인 반응이 필요한 경우로 생각할수 있겠다.

하지만 데이터의 전송, 어느 순간 상태의 알림 등등의 경우에는 연결을 지속적으로 유지해야 할 필요가 없다.
본 모델은 이미 

에서 사용하였고 지금까지 별 탈없이 사용한 모델을, UTF텍스트가 아닌 바이너리를  전송하는 경우로 생각하여 바꾸어 보았다.

목표는 
1) 예전에 철없던 시절의 소켓서버 ( http://www.scripter.co.kr/entry/socket-c-server-as3-client )의 비효율성을 타파하여 좀더 세련된 방법으로 소켓을 구성하는 법.

2) "1)"의 연속적인 개념으로, 지속적인 연결이 아닌 한방에 한번씩 연결하여 전송하고 연결을 종료하는 방법.

3)큰 파일을 무리없이 전송하기 위해 버퍼를 설정하여 끊어 읽어 기록하는 방법

을 정리해보겠다.


우선 간단한 순서도를 보면 이러하다.


c# 서버
using System;
using System.Windows;
using System.Net.Sockets;
using System.Threading.Tasks;
using System.IO;

namespace testEncoderRecieve
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
        }

        private Task ServerThread;
        private TcpListener server;
        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            ServerThread = new Task(startServerThreaed);
            server = new TcpListener(System.Net.IPAddress.Parse("127.0.0.1"),5555);
            //TcpListener를 생성하고, 서버 스레드가 시작되었다
            ServerThread.Start();
        }
        void startServerThreaed()
        {
            //서버를 시작시킨다.
            server.Start();

            //버퍼를 설정한다. 우선64바이트 만큼만...
            Byte[] buffer = new Byte[64];

            int testCount = 0;
            while (true)
            {
                //클라이언트를 대기한다. 클라이언트로 부터 접속신호가 있기 전까지 루프는 여기서 멈춤.
                TcpClient client = server.AcceptTcpClient();
                //클라이언트가 접속하고 스트림을 가져 온다.
                NetworkStream netStream = client.GetStream();
                //파일스트림을 생성하여 FileAccess.write로 한다.
                FileStream fs = new FileStream(@"d:\test" + testCount + ".png", FileMode.OpenOrCreate , FileAccess.Write);
                int i = 0;
                while ((i = netStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    //여기서 정수i가 0보다 클때까지, 즉 끝까지 루프를 반복하며 정해진 버퍼만큼 기록한다.
                    fs.Write(buffer, 0, i);
                }
                //루프가 끝나면 모든 스트림을 종료하고 다시 대기상태로 돌아간다.
fs.Close(); netStream.Close(); client.Close(); ++testCount; } } } }



as3 클라이언트
package {
    import flash.events.Event;
    import flash.net.Socket;
    import flash.utils.ByteArray;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.media.Camera;
    import flash.media.Video;
    /**
     * @author superSc_PC
     */
     
    [SWF(width = "1000")]
    public class Main extends Sprite
    {
        private var cam : Camera;
        private var vid : Video;
        private var captureBitmap : Bitmap;
        
        private var socket : Socket;
        public function Main()
        {
            //필요한것들을 생성하며 캡쳐환경을 만든다.
            cam = Camera.getCamera();
            vid = new Video();
            vid.attachCamera(cam);
            captureBitmap = new Bitmap(new BitmapData(vid.width, vid.height));
            captureBitmap.x = vid.width;
            addChild(vid);
            addChild(captureBitmap);
            //화면을 클릭할때 마다 캡쳐를 한다.
stage.addEventListener(MouseEvent.CLICK , takePic); //소켓을 생성하고 연결을 잡을 이벤트를 선언한다. socket = new Socket(); socket.addEventListener(Event.CONNECT, connectFn); } //인코딩을 담을 바이트배열 변수 를 선언한다. private var captureByte : ByteArray; private function connectFn(event : Event) : void { //연결이 되었다. 간단한 유효성검사후 전송한다. if (captureByte != null && captureByte.length > 0) { socket.writeBytes(captureByte); socket.flush(); socket.close(); } //연결이 종료되었다. } private function takePic(event : MouseEvent) : void { captureBitmap.bitmapData.draw(vid); captureByte = PngEncoder.encode(captureBitmap.bitmapData); //화면이 클릭되고 캡쳐된 비트맵은 png로 인코딩된다. captureByte.position = 0; //바이트배열 포지션을 처음으로 돌려주고 //소켓을 연결한다. if(socket.connected == false) { //소켓이 연결되면 위에서 선언한이벤트에 의해 connectFn이 실행된다. socket.connect("localhost", 5555); } } } }


아직까지는 as3 에서 버퍼단위로 전송하는 writeByte의 기능은 없는듯하다. 버퍼를 이용하기 위해선
인위적으로 해더 정보를 보내서 서버에서 끝어 읽기 하는 알고리즘이 필요하다
Yamecoder 야매코더_
C# 2011.03.04 18:52

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. BlogIcon burberry scarf 2014.11.09 07:58  수정/삭제  댓글쓰기

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

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

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

  4. BlogIcon meizitang 2014.11.11 01:57  수정/삭제  댓글쓰기

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

  5. BlogIcon 深圳眼镜批发 2014.11.12 00:50  수정/삭제  댓글쓰기

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

  6. BlogIcon 深圳眼镜批发 2014.11.12 00:52  수정/삭제  댓글쓰기

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

  7. BlogIcon moncler piumino donna safran 2014.11.12 11:44  수정/삭제  댓글쓰기

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

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

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

  9. BlogIcon cheap woolrich coats 2014.11.28 08:27  수정/삭제  댓글쓰기

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

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

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

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

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

  12. 匿名 2015.01.14 18:29  수정/삭제  댓글쓰기

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

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

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

  14. 匿名 2015.01.15 12:22  수정/삭제  댓글쓰기

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

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

    을없永恒之塔服务端传奇服务端密传-服务端QQ西游私服务端天堂1私服务端

    千年服务端蜀门服务端征途服务端机战服务端神泣服务端醉西游服务端

    天堂I服务端挑战OL服务端剑侠情缘-服务端奇侠XIAH服务端挑战服务端


    传世开私服一条龙服务-

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


    传奇广告代理-

    IDC服务器以及空间租用-

    魔兽世界sf开服一条龙服务-


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

    Email:1285574370@qq.com

    更多商业版本免费开放下载




    天恒科技1.95皓月终极12星座道士加强升级版



    天恒科技1.85荣耀必杀极限之地广寒宫泡点元素PK版



    天恒科技1.85无特戒无英雄轻中变魔神唯我独尊麻痹宝宝



    天恒科技独家1.85恶魔世界装备分身15转八钻靓装元素中变版지어

  16. BlogIcon Discount samsung galaxy s6 2015.03.16 09:00  수정/삭제  댓글쓰기

    한수"Fire is an Element.

    Fire is Red, Yellow, and Orange.

    Fire is Bright and Light.

    Fire is the Sun.

    Fire is Passion.

    Fire is Love.

    Fire is Protection.

    Fire is Wise.

    Fire is Courageous.

    Fire is Ambitious.

    Fire is Intense.

    Fire is Powerful.

    Fire is Anger, Hatred, and Wrath.

    Fire is Pokemon.





    Fire Burns; Destroys.

    Fire Crea할리

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

    메지c'est &agrave; cette fte des lanternes un jour &agrave; manger| | princesse bon fils Original en vue de m&eacute;dias japonais est un prince le registre international Christian University en particulier dans la r&eacute;gion burberry femme de l'Asie un comportement tr&egrave;s civilis&eacute; Jiang Ziya l'intention de l'empereur de jade ses lettres il y a beaucoup de nom de famille est en bas de l마이

  18. BlogIcon sac burberry femme 2015.03.31 00:03  수정/삭제  댓글쓰기

    지있Silicon Valley &agrave,sacs burberry,basket burberry pas cher; l'entreprise d'obtenir des cas de discrimination fond&eacute,basket burberry pas cher;e sur le sexe de la BBC News

    Source: British Broadcasting Corporation, la mise &agrave; jour de temps: 2015-03-28 12 h 40: 30: la nouvelle classification

    Silicon Valley &agrave; l'entreprise d'obtenir un cas de discrimination fond&eacute;e sur 뉴다

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

    리정火车采集器html简单模板示范






    Motorcycle Trails In California You Would Like To Try







    [标签:来源]








    What men can do,Picking a Shopping Cart Solut, women can do as well. Right now, women are already able to do tasks that are mostly done by men. Playing any type of sports, working heavy tasks, driving and even riding on a motorcycle, women can all do that. Men should not un련일

  20. 匿名 2015.04.03 17:38  수정/삭제  댓글쓰기

    데시If your niche is speed and price, you may advertise in a billboard near any busses or transit railways. You may want to give out special discounts for regular customers.



    A. Strategy
    A strategy is the goal you want to achieve in your business in the short run,Online Scheduling Software Versus Google Calendar - What's the Difference-_10753, which is the first one year and for the long run, w가그

  21. 匿名 2015.04.06 01:07  수정/삭제  댓글쓰기

    리없火车采集器html简单模板示范






    What Ever Happened to the Old Motoring Clubs,A Shopping Marathon in Singap?







    [标签:来源]








    As a child I remember my parents proudly displaying what can only be described as a big square metal badge on the front grill of our car with "RAC" written on it. Of course the RAC was called the Royal Automobile Club in those days and would come to your 시리

Powerd by Tistory, designed by criuce
rss