'C#/Tip'에 해당되는 글 37건

  1. 2010.08.03 C# 클라이언트 TCP Network Class by 아르다

항상 tcp 클라이언트 만들때마다 코딩하려니깐 너무 너무 귀찮아서..
그냥 이거를 빼대로 만들려고 올립니다.
코드가 잘짜여졌거나 좋은건지는 전혀 모르겠고요..
필요할때 가져가서 고쳐서 쓸려고 합니다...


    class Network
    {
        private Socket sock;
        private MainApp app;
        private Thread NetworkThread;
        private delegate void ExceptionCallback(string msg);
        public Network(MainApp app)
        {
            this.app = app;

        }

        public bool Connect()
        {
            bool isConnect = true;
            if (sock != null) sock.Close();
            sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            while (true)
            {
                try
                {
                    IPAddress svrIp = IPAddress.Parse("127.0.0.1");
                    IPEndPoint ipep = new IPEndPoint(svrIp, 9507);
                    sock.Connect(ipep);
                    if (sock.Connected)
                    {
                        isConnect = true;
                        break;
                    }
                }
                catch (SocketException ex)
                {
                    isConnect = false;
                    app.ExceptionWrite("서버와 연결을 실패. 재접속 실행함.");
                }
            }
            app.ExceptionWrite("서버와 연결 됨.");
            return isConnect;
        }

        public void Receive()
        {
            while (true)
            {
                Thread.Sleep(500);
                byte[] data = new byte[2048];
                try
                {
                    long startTicks = DateTime.Now.Ticks;
                    int size = sock.Receive(data);

                    if (size <= 0) { Connect(); }
                    else app.ConvertData(Encoding.Default.GetString(data, 0, size));

                    TimeSpan workticks = new TimeSpan(DateTime.Now.Ticks - startTicks);
                    app.ExceptionWrite("서버로부터 받은 데이터 : " + size + "Byte / 걸린시간 : " + workticks.TotalSeconds + "초");
                }
                catch (SocketException ex)
                {
                    app.ExceptionWrite(ex.Message);
                    Connect();
                }
            }
        }

        public void ThreadStart()
        {
            NetworkThread = new Thread(new ThreadStart(Receive));
            NetworkThread.Start();
        }

        public void ThreadAbort()
        {
            if (NetworkThread != null) NetworkThread.Abort();
            if (sock.Connected) sock.Close();
        }
    }
Posted by 아르다